【问题标题】:SQL join three tables, get value from second, if null, then from thridSQL连接三张表,从第二张取值,如果为空,则从第三张取值
【发布时间】:2022-12-16 22:29:12
【问题描述】:

我正在使用 SQL Server 2019。

我有三张桌子。 我想使用内连接从第二个表中获取值,但如果第二个表中的值不存在,则应从第三个表中检索该值。

我想出了下面的 SQL,但这没有返回任何数据。

Select
Table1.ID,
Case
    When Table2.Value2 Is Not Null Then Table2.Value2
    Else Table3.Value3
End as Value
from Table1
Inner Join Table2 On Table1.ID = Table2.ID2
Inner Join Table3 On Table1.ID = Table3.ID3

我用谷歌搜索,但找不到答案。 感谢您的帮助,谢谢。

【问题讨论】:

  • 您需要 LEFT JOIN 而不是 INNER JOINSELECT ... COALESCE(Table2.Value2, Table3.Value3)也是一个选项。
  • 所有 3 个表中都不存在 ID,因此这就是您得不到结果的原因。请熟悉joinsrelational-databases-joins

标签: sql sql-server


【解决方案1】:

我们可以在这里使用COALESCE()函数:

SELECT t1.ID, COALESCE(t2.Value2, t2.Value3) AS Value
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.ID = t2.ID2
LEFT JOIN Table3 t3 ON t1.ID = t3.ID3;

如果第二个表没有匹配的 ID,则需要左连接而不是内连接。在这种情况下,查询会保留第一个表中的所有 ID,并提供从第三个表中匹配的机会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多