Select "WHERE IN" 使用 PostgreSQL 和 JSONB
Select "WHERE IN" with PostgreSQL and JSONB
给定 table_a 这样的:
id | name
----+------
1 | aaaa
2 | bbbb
3 | cccc
我显然可以发出以下查询:
SELECT * FROM table_a WHERE name IN ('aaaa', 'bbb');
但是 table_b 是这样的:
id | data
----+------------------
1 | {"name": "aaaa"}
2 | {"name": "bbbb"}
3 | {"name": "cccc"}
如何发出查询"give me all the rows where the value of the key name is contained in this list of values?"
我知道我可以使用 jsonb operator @> 来检查每个组合,但不幸的是,我必须发出与我要检查的值的数量一样多的查询。有没有办法在一次查询中?
更新:
我马上找到了解决方案:
select * from table_b where data #>> '{name}' IN ('aaaa', 'bbb');
SELECT * FROM table_a WHERE data->>'name' IN ('aaaa', 'bbbb')
看来这就是你想要的?
给定 table_a 这样的:
id | name
----+------
1 | aaaa
2 | bbbb
3 | cccc
我显然可以发出以下查询:
SELECT * FROM table_a WHERE name IN ('aaaa', 'bbb');
但是 table_b 是这样的:
id | data
----+------------------
1 | {"name": "aaaa"}
2 | {"name": "bbbb"}
3 | {"name": "cccc"}
如何发出查询"give me all the rows where the value of the key name is contained in this list of values?"
我知道我可以使用 jsonb operator @> 来检查每个组合,但不幸的是,我必须发出与我要检查的值的数量一样多的查询。有没有办法在一次查询中?
更新:
我马上找到了解决方案:
select * from table_b where data #>> '{name}' IN ('aaaa', 'bbb');
SELECT * FROM table_a WHERE data->>'name' IN ('aaaa', 'bbbb')
看来这就是你想要的?