使用mysql连接的问题

时间:2010-04-28 23:13:04

标签: mysql join

我是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

但显然这不起作用,这样做的最佳方式是什么?

5 个答案:

答案 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)

嗯,我不太喜欢SQL,也许GROUP BY和HAVING会帮助你:) 查看参考:http://www.w3schools.com/sql/sql_having.asp