MySql 子查询运行而不是返回错误

MySql subquery runs instead of returning error

我遇到了一些奇怪的 mysql 子查询问题...

UPDATE site_plugin_products_items 
    SET item_distributor = 176
WHERE item_id in ( 
    SELECT item_id 
    FROM `site_plugin_products_field_values` 
    WHERE value_val in ( 554, 1384  , 785 )
)

我的问题是:

查询更新整个 table site_plugin_products_items 的结果 item_distributor = 176

如果我运行子查询个体:

SELECT item_id 
FROM `site_plugin_products_field_values` 
WHERE value_val in ( 554, 1384  , 785 )

我收到以下错误,因为我输入了错误的字段,它应该是 value_product,而不是 item_id

Error in query (1054): Unknown column 'item_id' in 'field list'

为什么会这样?大查询 return 不应该是一个错误而不是弄乱整个 table 吗?

看到结果的时候已经输了2年了,不知道有没有贴身备份:)

在查询中 -

UPDATE site_plugin_products_items 
    SET item_distributor = 176
WHERE item_id in ( 
    SELECT item_id 
    FROM `site_plugin_products_field_values` 
    WHERE value_val in ( 554, 1384  , 785 )
)

由于 item_idsite_plugin_products_field_values table 中不存在,它将使用 site_plugin_products_items table 中的列。

因为这将始终与条件相同(item_id 将始终等于自身),所以它会更新每一行。

我尝试了一些东西来证明这一点(对我自己)使用...

SELECT * FROM `order` WHERE id in ( select customerID from user u)

这会运行,但用户 table 没有客户 ID。但是如果我将别名添加到 customerID 字段...

SELECT * FROM `order` WHERE id in ( select u.customerID from user u)

这失败了。

简单的解决方案 - 使用别名来确保 table 每列使用哪个别名,并首先使用正确的列。虽然我不会提到备份!