Table UNION如果表2上的外键值为null

时间:2018-06-15 05:01:08

标签: sql sql-server sql-server-2016

我有两张桌子,我试图合并。

表1:

FAME_ID, FAME_Emblem_Title, FAME_Category

表2:

User_ID, FAME_ID, Times_Received

但是,表2中不存在某些值。例如:

Table 1:                        Table 2:
Fame_ID: 1                      Fame_ID: null/does not have a value
FAME_Emblem_Title: test1        User_ID: null/does not have a value
FAME_Category: 1                Times_Received: null/does not have a value

Fame_ID: 2                      Fame_ID: 2
FAME_Emblem_Title: test2        User_ID: user1
FAME_Category: 1                Times_Received: 1

我的目标是按类别和用户过滤SQL查询,但仍显示与第一个过滤器匹配的所有结果,即使表2没有任何值。顺便说一下,我的输出是JSON数组形式。

结果:

[
  {
    "User_ID": "user1",
    "FAME_ID": 1,
    "FAME_Category": "1",
    "Times_Received": 1,
   },
  {
    "User_ID": "null",
    "FAME_ID": 2,
    "FAME_Category": "1",
    "Times_Received": null,
   }
]

老实说,我不确定这是否可行。任何帮助都非常感谢。谢谢!

1 个答案:

答案 0 :(得分:3)

如果要从LEFT表返回所有行,即使没有与RIGHT表的连接,也需要JOIN称为LEFT OUTER JOIN。如果没有匹配项,则返回左表的行,并返回缺少的右表行的所有列的值null替代。

您可以按如下方式实现所需的连接,并在JSON中输出:

SELECT t2.User_ID, t1.FAME_ID, t1.FAME_Category, t2.Times_Received
FROM table1 t1 LEFT OUTER JOIN table2 t2 on t1.FAME_ID = t2.FAME_ID
FOR JSON AUTO;