【问题标题】:SQL INNER JOIN multiple tables not working as expectedSQL INNER JOIN 多个表未按预期工作
【发布时间】:2013-07-12 19:54:05
【问题描述】:

我试图更好地理解 SQL 数据库中的 JOIN 或 INNER JOIN 多个表。

这是我所拥有的:

SQL 查询:

SELECT *
FROM csCIDPull
INNER JOIN CustomerData ON CustomerData.CustomerID = csCIDPull.CustomerID
    INNER JOIN EMSData ON EMSData.EmsID = csCIDPull.EmsID
;

这不会返回任何结果,如果我删除 INNER JOIN EMSData 部分,它会提供来自 CustomerData 和 csCIDPull 表的信息。我的思维方式可能不正确。我假设 5 个表都有一个 int ID,这些 ID 也提交到一个表以组合所有表(主表只包含 ID,而其他表包含数据)。

我想我会向你们发帖的人开枪,看看我可能做错了什么。 -谢谢

【问题讨论】:

    标签: sql database join inner-join


    【解决方案1】:

    检查有关 SQL 连接的信息

    【讨论】:

      【解决方案2】:

      基本上听起来您的 EMSData 表中没有匹配的数据。您需要为此使用OUTER JOIN:

      SELECT *
      FROM csusaCIDPull
          LEFT JOIN CustomerData ON CustomerData.CustomerID = csCIDPull.CustomerID
          LEFT JOIN EMSData ON EMSData.EmsID = csCIDPull.EmsID
      

      A Visual Explanation of SQL Joins

      旁注:考虑不要返回*,而是从每个表中选择您想要的字段。

      【讨论】:

      • LEFT JOIN 效果很好。我还在玩一点,您提供的 SQL 连接的可视化解释非常有帮助。在我的 QUERY 中,我只是在代码中使用 * 进行测试,SELECT 是在我的代码中使用特定单元格设置的。
      • 一切都应该有数据,后来发现,EMS只有3行,而CustomerData有7行(忘记测试),更正了测试db CustomerData Table,它工作完美。再次感谢您的洞察力。
      【解决方案3】:

      在这个答案中涵盖外连接和内连接太多了,但我会从研究两者之间的区别开始:

      这是一个简短的开场白:

      内部联接要求您拥有满足联接条件的数据。如果您由于某种原因在 EMSData 和 csCIDPull 中没有任何具有通用 EmsID 的记录 - 根本不会返回任何记录。如果是这种情况,如果您仍希望 CustomerData 中的记录独立于 EMDData 连接返回,则应考虑使用外部连接

      【讨论】:

        猜你喜欢
        • 2020-01-08
        • 2013-10-09
        • 2019-08-15
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        相关资源
        最近更新 更多