SQL连接使用NULL

时间:2016-06-22 21:48:08

标签: sql

Table 1

Table 2

我想加入上面的两个表,根据NameID显示相应的Authorizationcode。 如果NameID匹配,则会显示相应的Authorizationcode, 如果没有,那么它将显示其他Authorizationcode NameID和OrderID是uniqueidentifiers。

结果应为:

cyclophosphamide - Auth01234
Adriamycin RDF - Auth01234
Neulasta - Auth04567

无法基于NULL NameID加入。请建议。

4 个答案:

答案 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)