【问题标题】:Joining empty table to return all rows加入空表以返回所有行
【发布时间】:2011-07-19 20:25:46
【问题描述】:

我有一个表 (Table1),它有一个复合主键 (Column1 + Column2)。我将它用作另一个表(表 2)中的外键。

现在我想要一个 SELECT 语句从 Table1 和 Table2 中选择所有记录。 但它返回我 0 行,因为 table2 是空的。我想要 table1 中的所有记录,如果 table2 中不存在,则 Table2 中的 Columns 值应该为空。

我知道,我只需要加入它。但我没有做对。

谢谢

【问题讨论】:

  • 你能显示你的加入条件吗?

标签: sql sql-server sql-server-2005 tsql


【解决方案1】:

你需要一个外部连接

SELECT *
FROM   table1
       LEFT OUTER JOIN table2
         ON table1.column1 = table2.column1
            AND table1.column2 = table2.column2  

Left 表示保留查询中左(第一)表中的所有行。

【讨论】:

    【解决方案2】:
    SELECT * FROM Table1 T1
    LEFT JOIN Table2 T2 ON T1.Id = T2.FK
    

    FK 是您在第二张表上的外键。 Left Join 将返回 table1 中的所有行,即使它们在 table2 中不存在。

    【讨论】:

    • 我们开始了,它是如此简单...不知道我以前使用过多少次连接... :( 无论如何它是星期一.. :P .... 非常感谢
    • @Scorpion:不客气。是的,星期一综合症打击了我们所有人;)不要忘记通过选择正确的回答者来结束您的问题。
    【解决方案3】:

    你需要一个LEFT JOIN

    SELECT Table1.*, Table2.*
    FROM Table1
    LEFT JOIN Table2 ON Table1.Column1 = Table2.Column2
    

    试试看。

    【讨论】:

    • 不需要指定Table1.*、Table2.*;仅使用 * 将返回两个表中的所有列。
    【解决方案4】:

    使用LEFT JOIN 加入您的表格。请参阅SQL SERVER JOINS 以了解此概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多