2017-10-17 187 views
0

我试图运行下面的代码我的SQL更新犯规犯

update apidura_dwh.B2C_order_line 
join apidura_dwh.B2C_orders 
using (order_id) 
set apidura_dwh.B2C_order_line.order_date = apidura_dwh.B2C_orders.order_date; 
commit; 

基本上只是想增加订单日期到行表 - 这将返回一个成功的消息,并说,行已经被改变 - 但是当我查询订单行表时,没有行被更改。

enter image description here

它似乎工作,如果我Orders表

enter image description here

  • 如何使这项工作任何想法加入?
+0

您使用的是哪种SQL客户端?它有一个提交按钮? – wast

+0

我会避免在连接中使用using子句,除非您100%确定(以及为什么依赖该子句),即每个表中只有1列可以使用。 –

回答

0

这会建议您有不匹配的订单或具有NULL日期的订单。首先,我会写查询为:

update apidura_dwh.B2C_order_line ol join 
     apidura_dwh.B2C_orders o 
     using (order_id) 
    set ol.order_date = o.order_date; 
commit; 

要测试更新工程 - 并假设ol.order_idNULL - 那么你可以做:

select count(*) 
from apidura_dwh.B2C_order_line ol 
where ol.order_date is null; 

前和更新后。

你可以看看这样做缺少订单ID:

select count(*) 
from apidura_dwh.B2C_order_line ol left join 
    apidura_dwh.B2C_orders o 
    using (order_id) 
where o.order_id is null; 

而对于使用NULL日期:

select count(*) 
from apidura_dwh.B2C_orders o 
where o.order_date is null; 
+0

谢谢你的答案 - 我发现没有缺少日期或订单ID(在B2C订单表中)的订单 - 问题出现在订单行表中,我无法使用更新填充order_date列。感谢 –

0

不能使用JOIN一个UPDATE查询中。

UPDATE B2C_order_line 
SET B2C_order_line.order_date = B2C_orders.order_date 
FROM B2C_orders 
WHERE 
B2C_order_line.order_id = B2C_orders.order_id; 

试试这个。

+0

谢谢 - 我试过了,但它给了我一个错误 - 我做了如下改变 UPDATE B2C_order_line SET B2C_order_line.order_date =(选择B2C_orders.order_date FROM B2C_orders WHERE B2C_order_line.order_id = B2C_orders.order_id);然而,这只是有同样的问题 –