我知道这是一个逻辑问题,但是我对SQL还是很陌生,不知道如何解决这个问题:
我有两张桌子。Table A
具有不同的ID
。Table B
用于存储与Table A
中任何行有关的数据位。Table B
可能有多行引用了Table A
的一行。
如何在ID's
中搜索所有A的table B
,其中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
(如果我使用=而不是!=),它将起作用,但是我如何做到相反呢?谢谢
最佳答案
一种方法是将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'
值。关于mysql - SQL逻辑不等于,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25140550/