当一侧不匹配时,mysql join不返回结果

时间:2018-08-03 14:15:28

标签: mysql join

我正在尝试从相关表中获取组件的名称及其状态,但是当一个组件没有状态时,我不会得到该名称。我的数据:

table a
-------
pkey
component_name


table b
-------
pkey
foreign_key
status
userid

我的查询:

SELECT a.component_name, b.status FROM a LEFT JOIN b ON a.pkey=b.foreign_key WHERE a.pkey=1 AND b.userid=5

我将为a.pkey设置多个值,因此理想情况下,我想执行以下操作以一次获取所有结果:

SELECT a.component_name, b.status FROM a LEFT JOIN b ON a.pkey=b.foreign_key WHERE a.pkey IN (1,2,3) AND b.userid=5

运行这些命令,我​​只会在两个表中的记录匹配时才得到结果,但是即使没有状态,我也想获取component_name。我该怎么做?

谢谢!

好的...一些示例数据:

table a
-------
1,course 1
2,course 2
3,course 3
4,course 4

table b
---------
1, 1, completed, 11
2, 2, completed, 11
3,1, cancelled, 10
4,4,completed,11

用户ID为11的预期结果:

course 1,completed
course 2, completed
course 3, NULL
course 4, completed

1 个答案:

答案 0 :(得分:1)

在以下情况下,您不应使用左连接的参与表列 将这些条件移到相关表的on子句中

  SELECT a.component_name, b.status 
  FROM a 
  LEFT JOIN b ON a.pkey=b.foreign_key  AND b.userid=5 
  WHERE a.pkey=1


  SELECT a.component_name, b.status 
  FROM a 
  LEFT JOIN b ON a.pkey=b.foreign_key AND b.userid=5 
  WHERE a.pkey IN (1,2,3)