我想加入上面的两个表,根据NameID显示相应的Authorizationcode。 如果NameID匹配,则会显示相应的Authorizationcode, 如果没有,那么它将显示其他Authorizationcode NameID和OrderID是uniqueidentifiers。
结果应为:
cyclophosphamide - Auth01234
Adriamycin RDF - Auth01234
Neulasta - Auth04567
无法基于NULL NameID加入。请建议。
答案 0 :(得分:1)
这有点棘手。这是一个使用两个left join
的方法。第二个条件只选择NULL
中的table2
行(也可以使用cross join
):
select t1.name, coalesce(t2.authorizationcode, t2null.authorizationcode) as authorizationcode
from table1 t1 left join
table2 t2
on t1.nameid = t2.nameid left join
table2 t2null
on t2null.nameid is null;
这是ANSI标准,应该适用于大多数数据库。
答案 1 :(得分:1)
我会用UNION
来解决这个问题SELECT DISTINCT NameID, AuthorisationCode
FROM
( SELECT NameID, AutorisationCode
FROM table1 t1 INNER JOIN
table2 t2 ON t1.nameid = t2.nameID
UNION
SELECT NameID, AutorisationCode
FROM table1 t1 LEFT OUTER JOIN
table2 t2 ON t1.nameid = t2.nameID
) DATA
答案 2 :(得分:1)
试试这个:
SELECT t1.Name, ISNULL(t2.AuthorizationCode, t3.AuthorizationCode) AS AuthorizationCode
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 on t1.NameID = t2.NameID AND t1.OrderID = t2.OrderID
LEFT JOIN Table2 AS t3 on t3.NameID IS NULL AND t1.OrderID = t3.OrderID
我假设你也想加入OrderID。如果没有,请更清楚地提问。
答案 3 :(得分:1)
您的屏幕截图来自管理工作室,因此是SQL Server特定的答案。
newFragment
它需要table1上的索引(OrderId,NameId)