我想从表用户连接表组和groups2,并选择从表组和表组2中列出的所有user_id。这是我的表及其数据:
如果你注意到,表组有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
答案 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语句的结果合并到一个结果集中。
答案 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