【问题标题】:MySQL Query missing some results with 3rd JOINMySQL Query 缺少一些带有 3rd JOIN 的结果
【发布时间】:2018-12-19 22:03:45
【问题描述】:

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

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(如果可用)。

【问题讨论】:

    标签: mysql


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      您应该使用显式联接,因此第一个联接是第三个表的内部联接,您需要左联接

      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
      

      【讨论】:

      • 第二次提到使用显式连接;在这种情况下是必需的,但实际上应该始终使用。也值得一提;如果您有多个用于 empno 的图像,则任何匹配项都将具有相互匹配的单独结果行,除非每个结果行具有不同的匹配图像。
      【解决方案3】:

      你追求的是左连接。来自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
      

      【讨论】:

        猜你喜欢
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多