我在使用同一查询中的子查询更新两个表时遇到问题。这是课程项目的一部分,必须包含这两个陈述。我了解子查询的工作方式,并且能够一次更新两个表,但是当我尝试合并子查询时,它仍然给我这个错误。

我在网上看过,唯一能找到的解决方法是为字段分配别名,以避免产生歧义错误。但是我不确定如何在更新语句中分配它。

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.priceshipment.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"

10-07 14:12
查看更多