我知道这是一个逻辑问题,但是我对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 byhaving子句一起使用:

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/

10-13 06:44