【问题标题】:Joining an ID with a NULL使用 NULL 连接 ID
【发布时间】:2015-07-19 09:59:50
【问题描述】:

我正在尝试将一个数据表连接到另一个表,但我要加入的 ID 之一是 NULL。但是,我有一个特定的 ID,我希望它与 NULL 链接。

我可能在这个例子中过于简化了这个问题,但我希望这会为我指明正确的方向。所以假设我们有下面的两个表。

表 1:

    Name    ID
    A       1
    B       2
    C       NULL

表 2:

    ID      Value
    1       4
    2       5
    3       6

我需要在查询中做什么才能得到这样的输出?

输出:

    Name    Value
    A       4
    B       5
    C       6

提前感谢您的帮助。

【问题讨论】:

  • 在连接条件上使用 ISNULL 条件,例如 ON ISNULL(t1.ID,specific id) = t2.ID

标签: sql sql-server select null sql-server-2012


【解决方案1】:
SELECT t1.Name AS Name , coalesce(t2.ID,standardvaluefornulls) AS ID
FROM table1 t1
LEFT JOIN table2 t2 ON t1.Value = t2.Value

编辑:这不适用于普通连接,因为它会跳过没有 t2.value 值的行,因此请记住,您的左表 (t1) 将始终具有'Value' 的值,您可以使用左连接,因此即使 table2 中没有结果的那些也会得到标准的 null 值作为结果

SQLFIDDLE 来证明它有效:http://sqlfiddle.com/#!9/b2e15/12

【讨论】:

    【解决方案2】:

    如果您知道具体的 ID:使用 ISNULL

    SELECT name, value
    FROM   table1
    JOIN   table2 ON ISNULL(table1.id,3) = table2.id
    

    【讨论】:

      【解决方案3】:
      SELECT name, value
      FROM   table1
      JOIN   table2 ON (table1.id = table2.id or table1.id IS NULL)
      

      【讨论】:

      • 这可能会回答这个问题,但如果你能添加一些解释就更好了。谢谢。
      【解决方案4】:

      您可以在多个条件下加入,并在辅助加入条件中加入您的特定场景:

      select name, value
      from table1 t1
      inner join table2 t2 on t1.id = t2.id
          or (t1.id is null and t2.id = 3)
      

      【讨论】:

        【解决方案5】:

        使用 COALESCE(ID,3) 而不是 table1.id 加入

        【讨论】:

          【解决方案6】:

          您可以在on 子句中明确检查:

          SELECT name, value
          FROM   table1
          JOIN   table2 ON (table1.id = table2.id) OR 
                           (table1.id IS NULL AND table2.id = 3)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-19
            • 1970-01-01
            • 2016-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多