我正在使用sql server和ANSI-89标准。
transport type是与transporttypecode上的运输表的联接。 订单或订单项与运输代码上的运输表结合在一起。
我如何进行条件连接,如果可以获取每个订单商品的运输类型名称,那么这里使用的正确方法是什么,这样我就可以相应地选择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
样品数据
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
输出
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
答案 0 :(得分:1)
一种方法在coalesce()
子句中使用on
:
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;