加入3桌&插入SQL Server中的第4个表

时间:2011-02-26 14:29:49

标签: sql sql-server join

我正在加入3个表格 - itemssales,& purchase

然后,将组合数据插入第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表是空的,所以在执行上面的查询时没有任何反应?为什么这样?

至少它应该将items表中的其余列插入第4个表。

它在销售表中找到 - sale_qty,&在购买表中,purch_qty为空,因此它应在最终表格中的这些列中填充为空。填充其余的列,因为它们是从包含数据的项目表中选取的,因此它应该填充该列。

但它没有这样做?

根据JOIN的定义,项目表中的ITEM_CD与销售&的ITEM_CD列不匹配。购买表,因为它们都是空的,所以这就是原因。

但是我希望其余的数据插入到第4个表中,那么有什么方法可以做到这一点吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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