2016-07-31 190 views
0

我有SQL Server表如下,需要執行連接以產生如下結果。SQL Server:如何交叉連接表

Custorder

itemcode orderqty 
------------------- 
item001  10 
item003  30 
item004  50 

製造

itemcode manuqty 
-------------------- 
item001  100 
item002  200 
item004  300 

我如何加入這兩個表產生

itemcode orderqty manuqty 
--------------------------------- 
item001  10   100 
item002  NULL  200 
item003  30   NULL 
item004  50   300 

得到任何幫助。

回答

1

首先,在DB社區中使用短語「交叉聯接」來引用生成所謂的「笛卡爾積」的聯接。對於例如,字母交叉加入了與本身會產生AA,AB,AC,AD ... AZ,BA,BB,BC等

你想要的只是一個普通的加盟:

Select coalesce(co.itemcode, m.itemcode) itemCode, 
    co.orderqty, m.manuqty 
From custorder co 
    full join manufactured m 
     on m.itemcode = co.itemcode 
+0

常規連接,將不包括'item002'從'manufactured' – JamieD77

+0

@Charless BRETANA我測試代碼只給item001 10 100和item004 50 300,其他兩項缺失 – Jackie

+0

然後你想外連接,在這種情況下, l' [outer]'join'。我編輯了我的答案來解決。 –

4

你可以使用完整的外部連接。

SELECT ISNULL(co.itemcode, ma.itemcode) itemcode , 
     orderqty , 
     manuqty 
FROM custorder co 
     FULL OUTER JOIN manufactured ma ON co.itemcode = ma.itemcode 

你有另一種選擇是使用查詢兩個表中建立自己的itemcode列表,並加入到它,如果你有很多的記錄,讓您的結果。這可能會導致一個非常緩慢的查詢。理想情況下,你將有類似的一個表來inventory (itemid int, itemcode varchar),你會使用表外連接到其他..

;WITH items AS (
    --get distinct itemcodes from both tables 
    SELECT itemcode FROM custorder 
    UNION 
    SELECT itemcode FROM manufactured 
) 
SELECT i.itemcode, 
     co.orderqty, 
     ma.manuqty 
FROM custorder co 
     RIGHT OUTER JOIN items i ON i.itemcode = co.itemcode 
     LEFT OUTER JOIN manufactured ma ON i.itemcode = ma.itemcode