获取列类型为JSONB的唯一记录

时间:2016-10-07 04:15:01

标签: json postgresql jsonb

我有一个复杂的Postgres查询我试图制作,主要是因为我的列/数据是JSONB类型。

我需要获取所有记录

  • 其中Auth.statusvalid
  • UserId1
  • 排除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

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
相关问题