假设我有一个包含数据的表,我在那里存储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
答案 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'