SQL Left Join并包含NULL记录

时间:2014-04-16 16:23:08

标签: sql sql-server sql-server-2008

我有如下查询:

SELECT *
FROM dbo.Item AS i
LEFT JOIN dbo.ItemSpecific AS is ON i.ID = is.ID


dbo.Item
ID
Name
Description

dbo.ItemSpecfic
ID
ItemID
Name
Description

您会注意到dbo.ItemSpecific表包含与d​​bo.Item表相同的列。如果某个项目的帐户级别有自定义,则详细信息位于dbo.ItemSpecific表中,否则如果该帐户仅使用标准项目,则根本不会有dbo.ItemSpecific记录。

我要做的是获取每个帐户的所有特定记录的列表,以及帐户在没有自定义时将使用的标准项记录。有没有办法在单个查询中执行此操作,或者是一个联合我唯一的选择?现在使用左连接,如果有任何自定义,则不会返回常规dbo.Item记录,因为连接已完成。

我想要的数据示例如下:

ItemID       ItemSpecificID       Name         Description
1                   1             'Test'         'Test'
2                  NULL           'Test2'        'Test2'
2                   2             'Test3'        'Test3'
2                   3             'Test4'         'Test4'

2 个答案:

答案 0 :(得分:0)

FULL OUTER JOIN是你的朋友。

enter image description here

FROM
    dbo.Item I
    FULL OUTER JOIN dbo.ItemSpecific IS ON I.Id = IS.ItemID

答案 1 :(得分:-1)

试试这个

SELECT i.ID,
       isp.ItemSpecificID,
       Isnull(isp.Name, i.Name) Name,
       Isnull(isp.[Description], i.[Description]) [Description]
FROM dbo.Item AS i
LEFT outer JOIN dbo.ItemSpecific AS isp ON i.ID = isp.ItemID

Real Result