我知道这是一个逻辑问题,但我对SQL很新,不知道如何通过这个:
我有两张桌子。
Table A
有一个独特的ID
Table B
用于存储与Table A
中的任何行有关的数据位。
Table B
可能有多行引用Table A
的单行。
如何搜索ID's
中table B
的{{1}}中B
的单行SELECT DISTINCT table_a_id FROM table_b b WHERE b.meta_key != 'hidden'
不等于某个值的所有内容?
table_a_id
由于table_a_id's
不明显,只要该table B
table_a_id
中'hidden'
的唯一行不是table_a_id
,就会返回{{1}}。显然,如果我正在寻找隐藏的每个{{1}}(如果我使用=而不是!=),它会起作用,但我如何实现相反的目标呢?
由于
答案 0 :(得分:0)
一种方法是将group by
与having
子句一起使用:
SELECT table_a_id
FROM table_b b
GROUP BY table_a_id
HAVING SUM(b.meta_key = 'hidden') = 0;
另一种方法是使用not exists
:
select a.id
from table_a a
where not exists (select 1
from table_b b
where a.id = b.table_a_id and b.meta_key = 'hidden'
);
此版本实际上具有以下优势:它将显示table_a
中的所有行,即使table_b
中没有行也是如此。第一个版本仅显示table_b
中包含一些数据的ID,而不是'hidden'
值。