我正在加入3个表格 - items
,sales
,& 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个表中,那么有什么方法可以做到这一点吗?
答案 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