2013-04-28 81 views
0

我並不完全確定如何標題我的問題,如果有人知道更好的標題,請隨時編輯它。將一個表中的一列與另外兩個表中的其他列結合起來sql

基本上我有一個問題,我不知道該怎麼做。

我有一個數據庫與傳遞地址和帳單地址。如果遞送地址爲空,我希望它顯示帳單地址。我已經實現了這個使用:

SELECT DELIVERYADDRESS AS "Address" 
FROM SHOPORDER so 
UNION 
SELECT BILLINGADDR AS "Address" 
FROM CUSTOMER 

這樣的作品。我也需要它與訂單「連接」。所以我這樣做:

SELECT ORDID FROM SHOPORDER 

我想是我的表看起來像
| ORDID | ADDRESS(DeliveryAddress或BillingAddress如果DeliveryAddress爲null)

請注意,我的問題表指出我必須使用聯合。我試過這個:

SELECT ORDID, (SELECT DELIVERYADDRESS FROM SHOPORDER 
    UNION 
     SELECT BILLINGADDR FROM CUSTOMER) 
FROM SHOPORDER 

但它不起作用。我一直在嘗試一個小時,但我無法弄清楚。我試過內部連接,左連接,右連接等。我只是無法弄清楚。有人有什麼主意嗎?謝謝。

回答

0

既然你提到UNION是強制性

SELECT ORDID,DELIVERYADDRESS AS "Address" 
FROM SHOPORDER 
WHERE DELIVERYADDRESS IS NOT NULL 

UNION 

SELECT ORDID,BILLINGADDR AS "Address" 
FROM CUSTOMER 
WHERE ORDID IN (SELECT ORDID 
       FROM SHOPORDER 
       DELIVERYADDRESS IS NULL 
       ) 
+0

我不認爲客戶表中將列ORDERID – JBrooks 2013-04-28 05:34:59

+0

是啊,客戶沒有ORDID,這就是爲什麼我有這樣的問題:/ – Anteara 2013-04-28 06:00:38

+0

@nhasan感謝您的解決方案,我能夠想出一個解決方案,我會把你的標記爲最佳答案,但我會也發佈我的意見,任何人都有類似的情況。 – Anteara 2013-04-28 06:08:23

1

您可以使用聚結這樣的:

選擇ordid,凝聚(是DeliveryAddress,billingaddress)從 使用(客戶ID)

shoporder加盟客戶假定customerid是連接兩個表的字段。 合併非常簡單:如果第一個參數爲null,則使用第二個參數。

--dmg

0
SELECT CUSTOMER.CustomerId, 
SHOPORDER.ORDERID, 
COALESCE(SHOPORDER.DELIVERYADDRESS, CUSTOMER.BILLINGADDR) AS "Address", 
CASE SHOPORDER.DELIVERYADDRESS IS NOT NULL THEN 'D' ELSE 'B' END AS AddressType, 
FROM CUSTOMER 
INNER JOIN SHOPORDER 
ON CUSTOMER.CustomerId = SHOPORDER.CustomerId 
0

我能夠在mhasan的回答得到它的工作,通過查看:

SELECT ORDID,DELIVERYADDRESS AS "Address" 
FROM SHOPORDER so 
WHERE DELIVERYADDRESS IS NOT NULL 
UNION 
SELECT so.ORDID, c.BILLINGADDR AS "Address" 
FROM SHOPORDER so 
INNER JOIN CUSTOMER c 
ON so.CUSTID = c.CUSTID 
WHERE so.DELIVERYADDRESS IS NULL 
ORDER BY ORDID ASC 
+0

我很好奇,你爲什麼不使用coalesce?它將以更簡單的語句(您在UNION中的第二次加入)完成,並且效率更高。 – dmg 2013-04-30 03:27:45

+0

我會結束你的好奇心dmg。這是我猜的分配! – SaK 2013-10-13 01:44:26

相關問題