我有3个表OrderPayment
,OrderSummaryInfo
和OrderLossEntity
。OrderPayment
表具有列OrdertypeCD
,OrderLossEntity
表具有列OrderType
。
这三个表之间没有直接关系。Ordersummary
有一个主键orderevententity
。此表是两个表(OrderPayment
和OrderLossEntity
)的主表。OrderSummaryinfo
表有一个名为orderNumber
的列,OrderPayment
表也有OrderNumber
。这个OrderNumber
是OrderPayment
表中的主键,引用OrderSummaryinfo
:
OrderSummaryInfo.OrderNumber = OrderPayment.OrderNumber
OrderSummaryinfo.orderevententity
是OrderLosseventEntity.id
-->的主键,其中是OrderLosseventEntity
表中引用OrderSummaryinfo.orderevententity
的主键:
OrderSummaryinfo.orderevententity = OrderLossEntity.id
我的要求是OrderTypeCD
有3个可能的值“现金”,“礼物”和“奖励”。OrderType
列有2个可能的值-"Direct"和"Indirect"。
如果OrderTypeCD
的值为"Rewards",我应该将其更改为新值"CashBack",用于那些包含OrderType="Indirect"
的订单。
我正在尝试查询,但收到错误
UPDATE Orderpayment op
JOIN OrderSummaryInfo osi ON op.orderNumber = osi.OrderNumber
JOIN OrderLossEntity ole ON ole.id = osi.orderevententity
SET op.ordertypeCd = 'CashBck'
WHERE op.orderTypeCD = 'Rewards'
AND ole.OrdeType = 'Indirect';
我得到一个错误
SQL状态:42601
请帮助我更正此查询。
1条答案
按热度按时间ioekq8ef1#
你的第一个错误是从句的顺序。
set
子句必须紧跟着update
,并且不能在set
中使用表别名(参见documentation)。因此,您需要:其次,
from
部分必须遵循标准SQL格式,因此update table_name set column_name join
也将给予语法。为了完成必要的连接,你需要一个“子选择”。把这个和上面的内容沿着你的其他规定的要求一起,你会得到:**注:**未测试,未提供测试数据。