我有下表:
userID | key | value
1 color green
1 eyes blue
1 hair brunette
2 color red
如何选择没有“眼睛”键的所有用户ID?
答案 0 :(得分:1)
使用单个查询,您只需获取key = eyes的计数,并将此计数值与零进行比较,以获得不具有名为eye的键的用户ID
select `userID`,
sum(`key` = 'eyes') `count`
from t
group by `userID`
having `count` = 0
Demo
答案 1 :(得分:1)
我更喜欢LEFT JOIN
... IS NULL
方法:
SELECT DISTINCT userID
FROM table_name tn
LEFT JOIN table_name tn2
ON tn2.userID = tn1.userID
AND tn2.key = eyes
WHERE tn2.userID IS NULL
当表格被正确编入索引时,这往往优于其他方法。
答案 2 :(得分:0)
你可以这样做:
SELECT DISTINCT userID
FROM table
WHERE userID NOT IN (SELECT b.userID
FROM table b
WHERE b.key = 'eyes')
你最好还有另一个Users
表格,您可以从中选择userId
个数字,如果您这样做,您可以将其替换为第一个FROM table
和删除DISTINCT
要求。事实上,如果你有这样的话,你甚至可以SELECT * FROM users
,如果这是你想要的,那么就可以得到关于没有钥匙的所有用户的所有细节。
但无论如何,这应该有用。