簡體   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