多表JOIN .....从表到表中选择数据

时间:2013-12-27 12:17:19

标签: php mysql

我想从表用户连接表组和groups2,并选择从表组和表组2中列出的所有user_id。这是我的表及其数据:

TABLE users

TABLE groups

TABLE groups2

如果你注意到,表组有user_id 1,1,1和4,而groups2有user_id 1,1和3 ......

我正在使用此代码:

$query_groups = mysql_query("

SELECT users.user_id
FROM users

LEFT JOIN groups
ON groups.user_id=users.user_id

LEFT JOIN groups2
ON groups2.user_id=users.user_id

GROUP BY groups2.user_id

");
 while($rows = mysql_fetch_assoc($query_groups))
{
          echo $rows['user_id']."<br />";

}

但我得到的结果是:2 1 and 3而不是我想得到的1 4 and 3

3 个答案:

答案 0 :(得分:2)

使用此:

SELECT distinct uid from 
(SELECT distinct user_id uid from groups
UNION
SELECT distinct user_id uid from groups2) gps

如果您只需要user_id,则不需要用户表。

否则,您可以在此查询后通过加入用户获取用户信息:

SELECT distinct gps.uid, u.first_name from 
    (SELECT distinct user_id uid from groups
    UNION
    SELECT distinct user_id uid from groups2) gps,
    users u
WHERE u.user_id = gps.uid

答案 1 :(得分:1)

SELECT DISTINCT(user_id) FROM 
(SELECT DISTINCT(user_id) user_id FROM groups 
UNION SELECT DISTINCT(user_id) user_id FROM groups2) user_id ;

结果:

+---------+
| user_id |
+---------+
|       1 |
|       4 |
|       3 |
+---------+

UNION用于将多个SELECT语句的结果合并到一个结果集中。

http://dev.mysql.com/doc/refman/5.0/en/union.html

答案 2 :(得分:0)

如果您需要从仅在组表上具有链接的用户表中获取用户,则可以使用内部联接。如果链接对象仅存在于两个表中,则内连接从表中获取数据。 例如:

SELECT distinct(users.user_id)
FROM users

INNER JOIN groups
ON groups.user_id=users.user_id

INNER JOIN groups2
ON groups2.user_id=users.user_id

GROUP BY groups2.user_id

如果您需要从users表获取所有用户数据 - 您需要为每个用户表字段指定分组规则。喜欢distinct(users.user_id) 您可以在此处详细了解联接类型Join types