gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:28 25 4
gpt4 key购买 nike

我遇到了一些奇怪的 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 )
)

我的问题是:

查询结果更新了整个表 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'

为什么会这样?大查询不应该返回错误而不是弄乱整个表吗?

当我看到结果时,我已经失去了 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 )
)

由于 site_plugin_products_field_values 表中不存在 item_id,它将使用 site_plugin_products_items 表中的列。

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

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

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

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

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

这失败了。

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

关于MySql 子查询运行而不是返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com