加入3个表并在sql server中插入第4个表
我加入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列不匹配,因为它们都是空的,所以这是原因。
但我希望其余的数据插入到第四个表中,那么有没有办法做到这一点?
您需要将这些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
非常感谢先生,“ITEMS.ITEM_CD = sales.ITEM_CD上的左加入销售” - 对于此代码:实际加入过程如何?根据我的说法,因为它是左连接,所以连接处于&物品表格的左边,所以它将包括物品表格中的所有行,右边是销售表格。 – sqlchild 2011-02-28 05:30:27
@sqlchild是正确的 - 所有项目行将被包含在内,并且没有销售行的地方,销售列将被填充空值。 – Blorgbeard 2011-02-28 09:18:38
您可以使用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
如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线和编辑器工具栏上的漂亮格式点击“代码示例”按钮('{}')并语法突出显示它! – 2011-02-26 14:35:47