我是mysql的新手,我不知道我是否朝着正确的方向前进,但我遇到了mysql查询的问题。
我基本上有一个用户表
id name
---- --------
1 user1
2 user2
3 user3
4 user4
以及用户属性表
id userid attribute
---- ----- ------
1 1 5
2 1 6
3 2 5
4 3 4
我希望能够选择同时具有属性5和属性6的用户,所以在这种情况下我想要返回
id name
---- --------
1 user1
我尝试使用这样的连接。
SELECT u.id, u.name FROM users u LEFT JOIN attributes a ON (a.userid = u.id) WHERE a.attribute = 5 AND a.attribute = 6
但显然这不起作用,这样做的最佳方式是什么?
答案 0 :(得分:4)
这样做的一种方法是使用两个连接;例如:
SELECT ...
FROM users u
JOIN attributes a5 ON u.id = a5.userid AND a5.attribute = 5
JOIN attributes a6 ON u.id = a6.userid AND a6.attribute = 6
另一种方法是分组(注意我是MS SQL的人,不确定这是否是mysql的正确语法):
SELECT u.id, u.name
FROM users u
JOIN attributes a ON u.id = a.userid
WHERE a.attribute IN (5,6)
GROUP BY u.id, u.name
HAVING COUNT(*) = 2
答案 1 :(得分:0)
SELECT u.id, u.name FROM users u
INNER JOIN attributes a1 ON u.id = a1.userid
INNER JOIN attributes a2 ON u.id = a2.userid
WHERE a1.attribute = 5 AND a2.attribute = 6
答案 2 :(得分:0)
像这样更改查询会起作用:
从属性表中选择所有等于5或6的内容,然后检查匹配的用户。
SELECT a.id, u.name
FROM attributes AS a
LEFT JOIN users AS u ON a.id = u.id
WHERE a.attribute = 5 OR a.attribute = 6
答案 3 :(得分:0)
根据您的提问,我不认为其他两个答案是令人满意的。
如果你想:
选择两者的用户 属性5和属性6
以下查询是实现此目的的一种方法:
select
*
from
users
where
id in (select userid from attributes where attribute = 5)
and
id in (select userid from attributes where attribute = 6)
答案 4 :(得分:0)