我有一个复杂的Postgres查询我试图制作,主要是因为我的列/数据是JSONB类型。
我需要获取所有记录
Auth.status
为valid
UserId
是1
Details.reference.card.number
这是我的表:
+-----------------------+---------------------------------------------+--------+
| Auth | Details | UserId |
+-----------------------+---------------------------------------------+--------+
| {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} | 1 |
| {"status": "valid"} | {"reference": {"card": {"number": "3321"}}} | 1 |
| {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} | 1 |
| {"status": "Invalid"} | {"reference": {"card": {"number": "3331"}}} | 1 |
| {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} | 1 |
+-----------------------+---------------------------------------------+--------+
上面的查询应返回:
+-----------------------+---------------------------------------------+--------+
| Auth | Details | UserId |
+-----------------------+---------------------------------------------+--------+
| {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} | 1 |
| {"status": "valid"} | {"reference": {"card": {"number": "3321"}}} | 1 |
+-----------------------+---------------------------------------------+--------+
到目前为止我所拥有的。
SELECT * FROM table
WHERE "Auth" @> '{"status": "valid"}'
AND "UserId" = 1
答案 0 :(得分:0)
WITH sample_table AS (
SELECT
"userId",
p."Auth"->>'status' as "authStatus",
p."Detail"->'"reference"'->'card'->>'number' as "referenceCardNumber",
FROM my_table p
)
SELECT DISTINCT ON ("referenceCardNumber") "referenceCardNumber", *
FROM sample_table
WHERE "authStatus" = 'valid'
AND "userId" = 1