sql*_*ild 0 sql sql-server join
我加入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
Run Code Online (Sandbox Code Playgroud)
查询是:
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
Run Code Online (Sandbox Code Playgroud)
Items表填充但sales&purchase表是空的,所以在执行上面的查询时没有任何反应?为什么这样?
至少它应该将items表中的其余列插入到第4个表中.
它发现在销售表中 - sale_qty,&在购买表中,它purch_qty是空的,因此它应该在最终表中的这些列中填充空白并填充其余列,因为它们是从包含数据的项目表中选取的,因此它应该填充它.
但它没有这样做?
根据JOIN的定义,item表中的ITEM_CD与sales&purchase表的ITEM_CD列不匹配,因为它们都是空的,所以这就是原因.
但我希望其余的数据插入到第4个表中,那么有什么办法可以做到这一点吗?
您需要将这些join语句更改为left join.
默认情况下,a join是"内部联接",这意味着只包含联接两侧存在的行."左连接"包括连接" 左"侧的所有行.
例:
from items
left join sales on ITEMS.ITEM_CD =sales.ITEM_CD
left join purchase on items.ITEM_CD =purchase.ITEM_CD
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3792 次 |
| 最近记录: |