2011-02-26 188 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