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_id
在 site_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 每列使用哪个别名,并首先使用正确的列。虽然我不会提到备份!
我遇到了一些奇怪的 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_id
在 site_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 每列使用哪个别名,并首先使用正确的列。虽然我不会提到备份!