MYSQL-UPDATE ERROR子查询返回超过1行[重复]

Posted

技术标签:

【中文标题】MYSQL-UPDATE ERROR子查询返回超过1行[重复]【英文标题】:MYSQL-UPDATE ERROR subquery returns more than 1 row [duplicate] 【发布时间】:2015-07-24 23:12:36 【问题描述】:

这是我的问题

我有这张表叫list:

||client||name||address||zone||block||day||document||

并且list 也从名为documentclient 的列中从另一个表payments 中获取document 的更新。

问题是当我运行这个查询时

UPDATE list SET document=(SELECT document FROM payments WHERE list.client=payments.client)

document 值针对payments 表上的不同client 值重复时,我收到错误Subquery returns more than 1 row。显然我得到了错误,因为该值是重复的,但我需要用相应的 client 填充 document 列,即使对于不同的客户端有相同的 document

在这种情况下应该如何查询?如果它存在,当然。

谢谢。

【问题讨论】:

是的,我知道,是重复值,但我的意思是,我需要设置 document 甚至为不同的client 重复。 下一个问题是:为什么要复制这个值?除非您正在迁移数据库结构,否则这样的复制听起来像是有缺陷的设计。 @RandomSeed 该文件类似于收据或付款文件编号,但对于我与之合作的公司,他们为不同的客户使用相同的文件编号,因此他们想创建一个报告表他们可以知道客户使用的最后一个文件编号是什么。 请用自然语言解释你想做什么。我觉得您的查询非常错误,以至于误导了我们。 好的。付款表包含不同客户(或客户)所做的所有付款。列表只是用 phpbuilder 创建一个报告,所以,当我去 PHP 网页获取列表时,服务器运行一个带有查询的脚本,但它给了我错误。我知道是因为不同客户的付款具有相同的文件编号。但是我需要一个查询来更新和设置文档编号,即使同一个文档有不同的客户端。 【参考方案1】:

@nomistic 的链接非常有帮助,您基本上可以得到所有客户值在列表和付款表中匹配的结果。

“列表”表中是否有多个客户端相同的条目?

如果列表表只有一个客户端实例,您需要过滤您正在更新的特定付款记录(行),目前您总是会得到多个结果,您的查询需要构造为它将返回一个唯一的记录。

您也没有针对列表表上的 UPDATE 查询添加 WHERE 子句,这可能会影响多行,您的意思是要包含一个吗?

例子:

UPDATE list SET document=(SELECT document FROM payments WHERE list.client=payments.client AND payments.id='1234') WHERE client='ClientX';

如果运行此查询以响应对另一个表的更新(即付款),您将需要使用更新数据(例如,假设您的查询返回一个新的行 ID)您从付款更改中获得table 以更新列表表。

【讨论】:

抱歉,我看不到@nomistic 链接,你有吗?多个条目用于不同的客户。 是这个链接:link

以上是关于MYSQL-UPDATE ERROR子查询返回超过1行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MySql 会出现“子查询返回超过 1 行”错误?

SQL Server 子查询返回超过 1 个值。子查询遵循 =, !=, <, <= , >, >=

存储过程生成 msg 512 子查询返回超过 1 个值

子查询返回超过 1 个值。当子查询跟随 = 或子查询用作表达式时,这是不允许的

子查询返回超过 1 个值。这是啥意思?

SQL Server 触发器:子查询返回超过 1 个值