很难在标题中总结我的问题,所以没有完全涵盖..抱歉:)
问题如下: 我有两个表,其中一个是用户表,第二个是包含用户/组组合的连接表。
我有可以订阅多个群组的用户,我希望能够检查某人是否已经是某个群组的成员。我还希望能够获取用户信息,而不管用户是相关组的成员。
所以我有:
Table 1: userID, userName, etc...
Table 2: (with unique composite index) groupID, userID
我最好的尝试是:
SELECT * FROM table1 t1 LEFT JOIN table2 t2 ON t1.userID = t2.userID
WHERE userName = 'John' AND groupID = 1
(查看 John 是否是第 1 组的成员)
我认为问题出在 WHERE
子句中。该查询将只返回属于 groupID = 1
的用户。但我想要的是如果 John 不是该组的成员则返回 null。
任何想法,这甚至可能吗?谢谢!很棒
最佳答案
您需要将条件 table2.groupID = 1
从 WHERE
子句移动到 ON
条件(否则 LEFT JOIN
被取消):
SELECT u.*
, ug.groupID
FROM table1 AS u
LEFT JOIN table2 AS ug
ON ug.userID = u.userID
AND ug.groupID = 1
WHERE u.userName = 'John'
另一种选择是这种方法(类似于LEFT JOIN
):
SELECT *
, ( SELECT ug.groupID
FROM table2 AS ug
WHERE ug.userID = u.userID
AND ug.groupID = 1
) AS groupID
FROM table1 AS u
WHERE userName = 'John'
关于mysql:从 2 个表中获取结果,无论两个表中是否存在一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246964/