SQL:根据缺失值选择密钥

时间:2013-12-15 13:57:03

标签: mysql sql

我有一个像这样创建的表 表:

key      value
1        10000
1        10001        
2        10001

我想选择键2,因为它有10001而不是10000.有一个简单的方法吗?我尝试使用连接,但我不知道如何使连接选择仅缺少值。

3 个答案:

答案 0 :(得分:3)

假设您正在寻找不具备所有可用key的{​​{1}},您可以通过比较value的数量来做到这一点对于每个键,表示整个表中DISTINCT value的数量。

DISTINCT value

SQLFiddle

的行动

如果您只对一组特定的值感兴趣,则可以将其更改为使用硬编码值。

SELECT `key` FROM `table` 
GROUP BY `key`
HAVING COUNT(DISTINCT value) < (SELECT COUNT(DISTINCT value) FROM `table`)

为了概括为更多的值,SELECT `key` FROM `table` WHERE value IN (10001, 10000) GROUP BY `key` HAVING COUNT(DISTINCT value) < 2 子句中的数字需要与HAVING条件中的元素数相匹配。

答案 1 :(得分:1)

你可以这样做:

SELECT DISTINCT t1.`key`
FROM tablename t1
WHERE t1.`key` NOT IN(SELECT `key` 
                      FROM tablename 
                      WHERE value = 10000);

答案 2 :(得分:0)

我认为解决此问题的最简单方法是将逻辑放在having子句中。以下计算每个键出现的次数并应用您的逻辑:

select "key"
from t
group by "key"
having sum(value = 10000) = 0 and
       sum(value = 10001) > 0;

这是使用MySQL功能,其中布尔表达式(value = 10000)被视为整数,0为假,1为真。因此,sum(value = 10000)计算每个10000的值为key的行数。