2011-02-26 185 views
0

我加入3個表 - items,sales,& purchase加入3個表並在sql server中插入第4個表

然後,將組合數據插入到第4表FULL_DETAIL_OF_ITEMS

ITEMS表中的列:ITEM_CD, ITEM_NM, COM_CD, SALE_RT, PURCH_RT, MRP

SALES表中的列:ITEM_CD, ITEM_NM, SALE_QTY

PURCHASE表中的列:ITEM_CD, ITEM_NM, PURCH_QTY

FULL_DETAIL_OF_ITEMS表中的列:

ITEM_CD, ITEM_NM, COM_CD, SALE_RT, PURCH_RT, MRP, SALE_QTY, PURCH_QTY 

查詢是:

insert into FULL_DETAIL_OF_ITEMS 
    SELECT 
    Items.Item_CD, 
    Items.Item_NM , 
    ITEMS.COM_CD, 
    ITEMS.SALE_RT, 
    ITEMS.PURCH_RT, 
    ITEMS.MRP, 
    SALES.SALE_QTY, 
    PURCHASE.PURCH_QTY 
    FROM items 
    JOIN sales on ITEMS.ITEM_CD = sales.ITEM_CD 
    JOIN purchase on items.ITEM_CD = purchase.ITEM_CD 

Items表填滿,但sales & purchase表是空的,所以在執行上面的查詢沒有任何反應?爲什麼這樣?

至少它應該從項目表中插入其餘列到第4個表格中。

報告認爲,在銷售表 - sale_qty,&在購表人,purch_qty是空的,所以應該在列的決賽桌&填充其餘在這些列中填入空,因爲他們是從它由數據項桌上拿起所以它應該填補這一點。

但它不這樣做?

根據JOIN的定義,項目表中的ITEM_CD與銷售&購買表的ITEM_CD列不匹配,因爲它們都是空的,所以這是原因。

但我希望其餘的數據插入到第四個表中,那麼有沒有辦法做到這一點?

+0

如果您發佈的代碼,XML或數據樣本,** **請在高亮文本編輯器的線和編輯器工具欄上的漂亮格式點擊「代碼示例」按鈕('{}')並語法突出顯示它! – 2011-02-26 14:35:47

回答

6

您需要將這些join聲明更改爲left join

默認情況下,join是「內部連接」,這意味着只有連接兩邊存在的行纔會包含在內。 「左連接」包括連接「左」側的全部行。

例子:

from items 
left join sales on ITEMS.ITEM_CD =sales.ITEM_CD 
left join purchase on items.ITEM_CD =purchase.ITEM_CD 
+0

非常感謝先生,「ITEMS.ITEM_CD = sales.ITEM_CD上的左加入銷售」 - 對於此代碼:實際加入過程如何?根據我的說法,因爲它是左連接,所以連接處於&物品表格的左邊,所以它將包括物品表格中的所有行,右邊是銷售表格。 – sqlchild 2011-02-28 05:30:27

+0

@sqlchild是正確的 - 所有項目行將被包含在內,並且沒有銷售行的地方,銷售列將被填充空值。 – Blorgbeard 2011-02-28 09:18:38

1

您可以使用select into聲明,將默認情況下,在運行時創建新表儘量減少您的查詢。

select Items.Item_CD,Items.Item_NM,Items.COM_CD,Items.Mrp,Items.Purchase_RT,Items.Sale_RT, 
     purchase.Purchase_QTY,Sales.Sale_QTY 
into full_details_of_items 
from Items 
inner join purchase 
inner join Sales 
on purchase.Item_CD=Sales.Item_CD 
on items.Item_CD=purchase.Item_CD