2016-07-21 10 views
1

So können, sagen, ich habe zwei geordnete Anordnungen mit der gleichen Anzahl von Elementen, wobei jeder Index jedes Array auf die andere bezieht sich auf den gleichen IndexEinzel Update-Abfrage von zwei geordneten Arrays

values = [ 5, 7, 8, 9 ] 
keys = ['a', 'b', 'c', 'd' ] 

anstatt das zu tun mehrere Updates innerhalb einer Schleife

for thing, index in values 
    UPDATE table SET column1 = thing WHERE column2 = keys[index] 

ist es eine Möglichkeit, diese Arrays in Postgres zu ziehen und sie in einer einzigen UPDATE Abfrage verwenden?

Etwas wie:

UPDATE table SET column1 = values[?] WHERE column2 = keys[?] 
+0

es gibt nicht eine direkte Art und Weise. Sie müssen diese zwei Array in eine Tabelle mit http://stackoverflow.com/questions/8760419/postgresql-unnest-with-element-number konvertieren –

+0

Wenn Sie die Schlüssel und Werte zusammen in einem Hstore oder Json-Objekt speichern, wäre es ziemlich einfach zu tun, aber nichts direkt. – Wolph

Antwort

1

Ja ist auch ein Weg.

Angenommen, aktuelle Postgres 9.5 seit Sie nicht angegeben haben. Verwenden Sie die neue Form von unnest() mehrere Arrays parallel UNNEST:

und Verwendung Die abgeleitete Tabelle in einer Ebene UPDATE:

UPDATE tbl t 
SET column1 = a.value 
FROM unnest ('{5, 7, 8, 9}'::int[] 
       ,'{a, b, c, d}'::text[]) AS a(value, key) 
WHERE t.column2 = a.key;