Ich habe empirisch entdeckt, dass PostgreSQL können Sie ‚Tupel‘ erstellen (Terminologie mir, ich weiß nicht, was sie es nennen) eine mehrspaltige Zustand in WHERE zu definieren:Wie übergeben Tupel (nicht Array) als Einschränkung Parameter in SQL-Abfrage über Client-Bibliothek (Postgres)?
update T set x=true where (a_id, b_id) IN ((3428, 3544), (3450, 3542));
Dies scheint genau das zu tun, was ich hoffe, es würde tun: x
wird aktualisiert, wo a_id = erstes Element in Tupel und B_id = zweites Element in Tupel. Das ist nahe daran, nützlich zu sein, aber damit es wirklich wichtig ist, muss ich in der Lage sein, diese 'Tupel' als Parameter aus einer Client-Bibliothek zu setzen; insbesondere node-pg
in diesem Fall.
Ist es möglich, $ 1 an etwas in der folgenden Abfrage zu binden, so dass $ 1 eine Liste von 0 oder mehr Paaren von a_id
und b_id
ist?
client.query("UPDATE t SET x=true WHERE (a_id, b_id) IN $1"), [...?])
Wenn nicht, kann ich zumindest tun
client.query("UPDATE t SET x=true WHERE (a_id, b_id) IN ($1, $2, ...$N)", [ a1b1, a1b2, ...aNbN ])
?
Sie können das tun zweite, aber nicht die erste. –
Beste Ratschläge: Vermeide Tupel wie eine Seuche, sie sind ein Vermächtnis, das durch JSON/JSONB abgelöst wurde - was du stattdessen verwenden solltest. –
@ vitaly-t JSON/JSONB in Bezug auf SQL-Abfrage? Können Sie auf eine Dokumentation zu diesem Thema verweisen? – user3175580