2017-10-20 145 views
0

我目前有一個看起來像這樣的PostgreSQL表,數據列是JSON,我試圖根據可能或不可能在JSON數據中的鍵來查詢表。Postgres查詢JSON數據

| 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"} | 

目前我有

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"); 

我目前得到的錯誤,錯誤:列「789」不存在

我知道有可能做的更有效的方式。任何幫助不勝感激。

+1

字符串需要用SQL中的單引號引起來。雙引號是標識符。 –

+0

Ahhhhhh!如此明顯。謝謝 –

回答