这个问题在这里已经有答案了:
在不同的行上选择满足不同条件的值(6个答案)
两年前关门了。
mysql数据库包含两个具有一对多关系的表:一个用户可以有多个设置:
Users:
id username password
--------------------------
1 Bob 123
2 Alice abc
...
Settings:
id user_id key value
-----------------------------
1 1 color blue // Bobs settings...
2 1 theme xy
3 1 size 5
4 2 size 5 // Alices settings...
问题:如何找到具有 color == blue AND size == 5
?
使用 LEFT JOIN
找到具有一个属性的用户没有问题:
SELECT users.id FROM users LEFT JOIN settings ON users.id = settings.user_id WHERE settings.key = 'color' AND settings.value = 'blue'
但是,一次搜索两个设置时,这不起作用?
用一句话就能解决这个问题吗?查询这些数据最有效的方法是什么?
1条答案
按热度按时间s1ag04yj1#
一种方法使用聚合和
having
:这假设没有重复的设置(如果是,则需要使用
count(distinct)
).