我有一個名為“游戲”的表,其中包含 2 個欄位:
- 名稱(可變字符)
- 資料(JSON)
這是一個示例資料行:
| 姓名 | 資料 |
|---|---|
| 測驗 | {“玩家”:[“PlayerOne”,“PlayerTwo”],“topPlayers”:[“PlayerTen”,“PlayerThirteen”]} |
現在我想要SELECT有一個名為“PlayerOne”的“玩家”的行。
我試過以下 SQL 命令但沒有成功:
SELECT * FROM games WHERE data -> players = 'PlayerOne';
SELECT * FROM games WHERE data ->> players = 'PlayerOne';
uj5u.com熱心網友回復:
陣列元素的位置不會每次都相同,因此您嘗試的直接參考不起作用 - 即使在修復您的運算式之后:data -> 'players' ->> 0或data #>> '{players,0}'
使用資料型別jsonb而不是json, 和jsonb包含運算子@>:
SELECT *
FROM games
WHERE data @> '{"players":["PlayerOne"]}';
如果您不能更改表定義,請在查詢中添加一個強制轉換:
...
WHERE data::jsonb @> '{"players":["PlayerOne"]}';
無論哪種方式,如果表很大,您都希望使用索引來支持它——在后一種情況下是運算式索引。看:
- 在 Postgres jsonb 中查詢陣列結構的正確索引是什么?
- Postgres 9.4 jsonb 陣列作為表
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536535.html
上一篇:文本[]上的SQLinitcap
下一篇:無法連接到psql資料庫
