mysql:从 2 个表中获取结果,无论两个表中是否存在一个字段

标签 mysql join

很难在标题中总结我的问题,所以没有完全涵盖..抱歉:)

问题如下: 我有两个表,其中一个是用户表,第二个是包含用户/组组合的连接表。

我有可以订阅多个群组的用户,我希望能够检查某人是否已经是某个群组的成员。我还希望能够获取用户信息,而不管用户是相关组的成员。

所以我有:

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 = 1WHERE 子句移动到 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/

相关文章:

mysql - 使用子查询和连接优化的查询

mysql - 如果不存在则插入表,否则更新

javascript/php 从数据库动态替换图像源

python - 如何在 Sqlalchemy 中正确使用 SQL 连接/子查询

MySQL加入特定结果

php - MySQL 左连接 - 右侧不重复

mysql - SQL ondelete 与连接表级联

MySQL 列上的触发器

mysql - “INSERT IGNORE” 和 “… ON DUPLICATE KEY UPDATE” 都会发生什么?

php - SQL JOIN——两个团队,一个标识数据库