[英]How to choose one column over another in a join if the column value is NULL?
I am using sql server and using ANSI-89 standard. 我正在使用SQL Server和ANSI-89标准。
transport type is a join with the transport table on transporttypecode. 运输类型是与运输类型代码上的运输表的联接。 the order or orderitem is joined with the transport table on transportcode.
订单或订单项与运输代码上的运输表结合在一起。
How do I do a conditional join, if that is possible to get the transport type name for each order item, what is the right approach to use here so that I can pick the transport_code on order or order_item accordingly and join with transport table? 我如何进行条件联接,如果可以获取每个订单商品的运输类型名称,那么在这里可以使用什么正确的方法,以便我可以相应地选择order或order_item上的transport_code并与运输表联接?
Order
-----
orderNo (PK)
country NOT NULL
transportCode NULL
OrderItems
----------
OrderNo (PK)
orderItemNo (PK)
transport_code NULL
Transport
---------
trasportcode (PK)
transportname NOT NULL
transporttypecode NOT NULL
transportType
-------------
transporttypecode (PK)
transporttypename NOT NULL
SAMPLE DATA 样本数据
Order
OrderNo Country TransportCode
1 USA ST1
2 ENGLAND
Order Item
Order No orderItemNo itemname transportCode
1 1 cooker ST2
1 2 scissor
2 1 stapler
2 2 pencil ST3
2 3 bottle
Transport
transportcode name transporttypecode
ST1 INS BUTTERFLY W
ST2 LUFTHANSA A
ST3 TRANS SIBERIAN RAIL RL
TransportType
Transporttypecode name
W Water
A Air
RL Rail
Output 产量
Order No orderItemNo itemname transportName transporttypeName
1 1 cooker LUFTHANSA Air
1 2 scissor INS BUTTERFLY Water
2 1 stapler
2 2 pencil TRANS SIBERIAN RAIL Rail
2 3 bottle
One method uses coalesce()
in the on
clause: 一种方法在
on
子句中使用coalesce()
:
select oi.*, t.transportName, t.transporttypeName
from orderitems oi join
orders o
on oi.ordernum = o.ordernum left join
transport t
on t.transportcode = coalesce(oi.transportcode, o.transportcode) left join
TransportType tt
on tt.Transporttypecode = t.Transporttypecode;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.