2016-07-31 79 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