我在使用同一查询中的子查询更新两个表时遇到问题。这是课程项目的一部分,必须包含这两个陈述。我了解子查询的工作方式,并且能够一次更新两个表,但是当我尝试合并子查询时,它仍然给我这个错误。
我在网上看过,唯一能找到的解决方法是为字段分配别名,以避免产生歧义错误。但是我不确定如何在更新语句中分配它。
update item, shipment
set item.price = 6.99,
shipment.price = 6.99
where price like(
select price
from item
join shipment on item.ship_id = shipment.ship_id
where item_num = "android543");
我知道这是模棱两可的,只是不确定如何为这些值分配别名。
最佳答案
您有两个名为price
的变量(item.price
和shipment.price
),而MySQL不知道您在引用哪个变量:
where price like(
您需要具体说明想要哪一个,例如
where item.price like(
请注意,尽管
like
在这种情况下可能会起作用(例如4.5 like 4.5
为true,但4.5 like 4.50
不是),但它是用于字符类型变量的。在这种情况下,更适合使用数字运算符,例如=
或可能的IN
(如果希望子查询有多个结果)。如果我正确理解了您的问题,则可以更简单地像这样重写查询:
update item i
join shipment s on i.ship_id = s.ship_id
set i.price = 6.99,
s.price = 6.99
where i.item_num = "android543"