加入参考表,但如果尝试连接没有连续值,则会发出问题

时间:2017-10-06 19:26:32

标签: sql sql-server join

假设我有一个包含数据的表,我在那里存储ID,例如1,2,3。我试图从参考表中获取文本值,但是,如果某个特定的行,则没有一个值,然后整行消失。

下面的表结构:

 tblData
 clientID        ReasonID          OtherID
 12              1                 17
 15              NULL              18



 tblReference
 FldName         ID              Label
 Reasons         1               Terminated
 Reasons         2               Absent

我基本上希望使用ReasonID将tblData与tblReference连接,但是如果tableData中的ReasonID为NULL,我不希望整行消失。我仍然需要看到NULL。我正在加入20个不同的字段,我刚刚意识到我缺少行,因为其中一些行为NULL值。我仍然需要看到NULL !!!!

这是我尝试过的......

 Select tblData.ClientID, tblData.ReasonId,tblReference.Label, tblData.OtherID from tblData 
 LEFT JOIN
 tblReference on tblData.ReasonID=tblReference.ID
 WHERE FldName='Reasons'

我也试过了Inner JOIN,但也没用。有什么想法吗?

期望的结果:

 clientID        ReasonID   Label           OtherID
 12              1          Terminated      17
 15              NULL       NULL            18

3 个答案:

答案 0 :(得分:1)

left join中第二个表的条件需要在on子句中,而不是where子句:

Select d.ClientID, d.ReasonId, r.Label, d.OtherID
from tblData d left join
     tblReference r
     on d.ReasonID = r.ID and r.FldName = 'Reasons';

在您的公式中,where条件将外连接转换为内连接。

答案 1 :(得分:1)

只需在连接上添加OR条件,类似于:

clojure.lang.Numbers/multiply

答案 2 :(得分:0)

以下查询可以满足您的需求。

Select tblData.ClientID, 
tblData.ReasonId,tblReference.Label, 
tblData.OtherID 
from tblData LEFT OUTER JOIN tblReference 
on tblData.ReasonID=tblReference.ID 
AND FldName ='Reasons'

这是一个完整的脚本,用于创建临时表,在其中插入数据并显示操作中的查询

DECLARE @Date TABLE
(
    ClientID INT,
    ReasonID INT NULL,
    OtherID INT NULL
)

DECLARE @Reference TABLE
(
    Name VARCHAR(MAX),
    ID INT,
    Label VARCHAR(MAX)
)


INSERT INTO @Date(ClientID, ReasonID, OtherID) VALUES (12, 1, 17)
INSERT INTO @Date(ClientID, ReasonID, OtherID) VALUES (15, NULL, 18)

INSERT INTO @Reference(Name, ID, Label) VALUES ('Reasons', 1, 'Terminated')
INSERT INTO @Reference(Name, ID, Label) VALUES ('Reasons', 2, 'Absent')

SELECT * FROM  @Date D LEFT OUTER JOIN  @Reference R ON D.ReasonID = R.ID AND R.Name='Reasons'