2017-03-09 2 views
0

Ich habe 2 Tabellen:Postgresql Wie aktualisiert man eine Spalte, wenn eine Zeichenfolge ein Wort enthält?

Tabelle A, die eine Postleitzahl Spalte mit einer Postleitzahl jeder Reihe (zB Zeile: E1 8NF)

Tabelle B, die eine Postleitzahl Säule mit mehreren Postleitzahlen durch ein Komma (Beispiel getrennt sind Reihe: E1 8NF, E1 8NG, E1 8NJ)

Wenn die Postleitzahl aus Tabelle A existiert in Tabelle B, will ich es geben eine 1

Wie dies in postgresql tun? Meine Anfrage bisher

UPDATE tablea 
set pcd = 1 where tablea.postcode exists in tableb.postcode ?? 

Antwort

2

Sie die durch Kommata getrennte Liste in ein Array konvertieren, so dass die Verwendung in einem sub-select:

update tablea a 
    set pcd = 1 
where exists (select * 
       from tableb b 
       where a.postcode = any(string_to_array(b.postcodes, ',')) 
      ); 

Wenn die Werte mit Räumen gespeichert sind zwischen die Kommas, müssen Sie eine trim() anwenden, die wahrscheinlich einfacher ist mit einem Beitritt in das Update:

update tablea a 
    set pcd = 1 
from (
    select trim(x.pc) as pc 
    from tableb b, 
     unnest(string_to_array(b.postcodes)) as x(px) 
) t 
where a.postcode = t.pc; 
0

versuchen auf diese Weise:

UPDATE tablea set pcd = 1 where postcode in (select b.postcode from tableb); 
2

Speichern von Listen in einem Komma getrennt Feld ist eine wirklich schlechte Idee. Es ist noch schlimmer in einer Datenbank wie Postgres, die sehr vernünftige Alternativen hat - wie Arrays und JSON-Felder. Aber manchmal sind wir mit den wirklich schlechten Entscheidungen anderer Leute festgefahren.

Eine Methode ist:

update tablea a 
    set pcd = 1 
    where exists (select 1 
        from tableb b 
        where ',' || a.postcode || ',' like ',' || replace(b.postcodes, ', ', ',') || ',' 
       ); 
Verwandte Themen