MySQL查询丢失了一些与第三次加入结果

时间:2018-07-11 19:11:22

标签: mysql

我有一个带有简单连接的核心查询,效果很好:

SELECT 
     TableA.JobType, 
     TableA.AssignedTech, 
     TableB.EmpNumber, 
     TableB.EmpFirstName, 
FROM 
     TableA, TableB
WHERE 
     TableA.AssignedTech=TableB.EmpNumber

我需要联接第三张表才能访问第三张表中的字段。

SELECT 
     TableA.JobType, 
     TableA.AssignedTech, 
     TableB.EmpNumber, 
     TableB.EmpFirstName, 
     images.image 
FROM 
     TableA, TableB, images 
WHERE 
     TableA.AssignedTech=TableB.EmpNumber
AND 
     TableA.AssignedTech=images.empno

这很好,除非没有以下关系:“ TableA.AssignedTech = images.empno”,此时不返回记录。

我需要显示核心查询中的所有记录,并在可用的情况下附加images.empno。

3 个答案:

答案 0 :(得分:1)

您需要使用左联接,如下所示。现在,我已经用左联接将两个表联接在一起,但是如果TableA和TableB之间始终有匹配的数据,则可以在TableA和TableB之间进行内部联接。但是无论如何,您似乎总是需要对表图像使用左连接

SELECT 
     TableA.JobType, 
     TableA.AssignedTech, 
     TableB.EmpNumber, 
     TableB.EmpFirstName, 
     images.image 
FROM 
     TableA
Left join TableB
  On TableA.AssignedTech=TableB.EmpNumber
Left join images 
  On 
     TableA.AssignedTech=images.empno

答案 1 :(得分:1)

您应该使用显式连接,因此第一个表的第一个连接是INNER JOIN,您需要左连接

SELECT 
     TableA.JobType, 
     TableA.AssignedTech, 
     TableB.EmpNumber, 
     TableB.EmpFirstName, 
     images.image 
FROM TableA
INNER JOIN TableB ON 
LEFT JOINN  images ON TableA.AssignedTech=images.empno

答案 2 :(得分:1)

剩下的是什么?来自documentation

  

如果在LEFT JOIN的ON或USING部分中没有与右表匹配的行,则将所有列都设置为NULL的行用于右表。

您的查询将是:

SELECT 
    TableA.JobType, 
    TableA.AssignedTech, 
    TableB.EmpNumber, 
    TableB.EmpFirstName, 
    images.image 
FROM 
    TableA
    JOIN TableB ON TableA.AssignedTech=TableB.EmpNumber
    LEFT JOIN  images ON TableA.AssignedTech=images.empno