我有一个像这样创建的表 表:
key value
1 10000
1 10001
2 10001
我想选择键2,因为它有10001而不是10000.有一个简单的方法吗?我尝试使用连接,但我不知道如何使连接选择仅缺少值。
答案 0 :(得分:3)
假设您正在寻找不具备所有可用key
的{{1}},您可以通过比较value
的数量来做到这一点对于每个键,表示整个表中DISTINCT value
的数量。
DISTINCT value
的行动
如果您只对一组特定的值感兴趣,则可以将其更改为使用硬编码值。
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
的行数。