选择没有包含特定内容的字段的ID

时间:2014-08-18 18:50:24

标签: mysql sql

我有下表:

userID | key      | value
1        color      green
1        eyes       blue
1        hair       brunette
2        color      red

如何选择没有“眼睛”键的所有用户ID?

3 个答案:

答案 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,如果这是你想要的,那么就可以得到关于没有钥匙的所有用户的所有细节。

但无论如何,这应该有用。