SQL逻辑不等于

时间:2014-08-05 13:53:22

标签: mysql sql unique

我知道这是一个逻辑问题,但我对SQL很新,不知道如何通过这个:

我有两张桌子。

Table A有一个独特的ID Table B用于存储与Table A中的任何行有关的数据位。

Table B可能有多行引用Table A的单行。

如何搜索ID'stable 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}}(如果我使用=而不是!=),它会起作用,但我如何实现相反的目标呢?

由于

1 个答案:

答案 0 :(得分:0)

一种方法是将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'值。