2017-10-20 2 views
0

Ich habe derzeit eine PostgreSQL-Tabelle, die etwa so aussieht, die Datenspalte ist JSON, ich versuche, die Tabelle basierend auf Schlüssel abzufragen, die möglicherweise in den JSON-Daten enthalten sind.Postgres Abfrage JSON Daten

| A | B | C |   data      | 
    ---------------------------------------------------- 
    | 1 | 2 | 3 | {}         | 
    | 2 | 3 | 3 | {"name": "jack", "message": "123"} | 
    | 3 | 4 | 3 | {"name": "jill", "voice": "456"} | 
    | 4 | 2 | 3 | {"name": "bill", "email" "789"} | 

Zur Zeit habe ich

SELECT * 
    FROM (
    SELECT 
    a, 
    b, 
    c, 
    coalesce(
     CASE 
     WHEN (data ->> 'message') IS NULL 
      THEN NULL 
     ELSE (data ->> 'message') 
     END, 
     '') AS message, 
    coalesce(
     CASE 
     WHEN (data ->> 'voice') IS NULL 
      THEN NULL 
     ELSE (data ->> 'voice') 
     END, 
     '') AS voice, 
    coalesce(
     CASE 
     WHEN (data ->> 'email') IS NULL 
      THEN NULL 
     ELSE (data ->> 'email') 
     END, 
     '') AS email 
    FROM mytable) AS t 
    WHERE (t.message = "789" OR 
      t.voice = "789" OR 
      t.email = "789"); 

Ich bin derzeit immer den Fehler, Fehler: Spalte „789“ existiert nicht

Ich weiß, es ist wahrscheinlich eine effizientere Art und Weise tun. Jede Hilfe sehr geschätzt.

+1

Strings müssen in einfachen Anführungszeichen in SQL eingeschlossen werden. Anführungszeichen sind für Bezeichner. –

+0

Ahhhhhh! so offensichtlich. Vielen Dank –

Antwort