繁体   English   中英

如果列值为NULL,如何在连接中选择一列而不是另一列?

[英]How to choose one column over another in a join if the column value is NULL?

我正在使用SQL Server和ANSI-89标准。

  1. 我想在每个订单项上显示运输类型名称以及项目详细信息
  2. 可以在订单或单个订单项上设置运输代码。
  3. 订单项上的运输代码(如果存在)在一个订单表之前。
  4. 如果在Order或OrderItem上没有设置运输代码,我仍然需要检索订单商品。

运输类型是与运输类型代码上的运输表的联接。 订单或订单项与运输代码上的运输表结合在一起。

我如何进行条件联接,如果可以获取每个订单商品的运输类型名称,那么在这里可以使用什么正确的方法,以便我可以相应地选择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    

一种方法在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM