Ich habe occasion
und relation
Tabellen. relation.occasions
ist ein JSON-Feld, das ein Array von Gelegenheitsschlüsseln enthält. Ich möchte occasion
Datensätze nach Beziehung erhalten, wobei occasion.key
in relation.occasions
. Es sei angenommen, dass dies mein DB Daten:Verwendung von PostgreSQL json_array_elements WHERE <value> IN-Klausel
Gelegenheit
key | name |
-------------------------------------
BIRTHDAY | Birthday |
ANNIVERSARY | Anniversary |
Beziehung
key | occasions |
------------------------------------------------------
FATHER | [ "BIRTHDAY", "ANNIVERSARY" ] |
FRIEND | [ "BIRTHDAY" ] |
Hier ist die Abfrage, die ich zu verwenden, ich versuche:
SELECT * FROM occasion o WHERE o.key IN
(SELECT json_array_elements(r.occasions)::text from relation r WHERE r.key = 'FATHER')
Das Ergebnis ist 0 Zeilen statt erwartet 2. Kann mir jemand einen Hinweis geben, was mache ich falsch? Wie kann ich sonst das gewünschte Ergebnis erzielen?
'wählen o. * Aus Gelegenheit o join relation r on (o.key = any (wählen Sie json_array_elements_text (r.occasions)) und r.key = 'VATER');' - einfacher ein bisschen, aber vorausgesetzt, dass te Schlüssel ist einzigartig. – Abelisto
@Abelisto Die Verwendung einer SRF in einer Auswahlliste sollte vermieden werden: [Sie werden wie eine Tabelle, eine Sicht oder eine Unterabfrage in der FROM-Klausel einer Abfrage verwendet.] (Https://www.postgresql.org/docs/9.5/ static/queries-table-expressions.html # QUERIES-TABLEFUNCTIONS) – Patrick
Ihr Link bezieht sich genau auf die FROM-Klausel, nicht auf die SRF-Verwendung. [Set Returning Functions] (https://www.postgresql.org/docs/9.5/static/functions-srf.html), Beispiel aus der offiziellen Dokumentation: 'SELECT generate_series (1.1, 4, 1.3);' – Abelisto