mysql - 基数违规 : 1242 Subquery returns more than 1 row

标签 mysql

我知道为什么会出现这个错误,但我不知道如何解决。这是情况: 我有一个表 A,其中有下一列 userID , switch , plateType , groupVal , brokeage . userID , plateTypegroupVal代表一个唯一的键。 groupValuserId可能有很多不同的值,但是 plateType只能有 4(A,B,C,D)。 一个 userId 的记录示例和一个groupVal将是:

Userid-------plateType------ groupVal------- brokeage
UserA---------  A----- ------------        3---------------        5.5
UserA---------  B----- ------------        3---------------        7.6
UserA---------  C----- ------------        3---------------        2.1
UserA---------  D----- ------------        3---------------        3.5

因此,当我运行下一个查询时,如果该记录不存在,则将被创建,但如果它们存在,则应该更新它们,但我得到的是这个错误:

Cardinality violation: 1242 Subquery returns more than 1 row

Insert into tableA (userID, plateType, groupVal, brokeage) 
Select 'UserB', plateType, groupVal, brokeage from tableA  
 where userID = 'UserA' 
on duplicate key 
 Update brokeage = (Select brokeage from tableA  where userID = 'UserA')

我知道它在子查询中,我在更新中使用的选择...所以我真正需要的是从 tableA 中选择userId = UserA 所在的记录但这与 groupVal 匹配和 plateTypes必须更新 UserB .我希望我说清楚,有人可以给出答案。

最佳答案

您需要在 SELECT 语句中引用值,这意味着您根本不需要子查询。当我们引用 SELECT 中使用的表时,可以使用 UPDATE 中的值:

INSERT INTO tableA (userID, plateType, groupVal, brokeage) 
SELECT 'UserB', plateType, groupVal, brokeage 
  FROM tableA AS t 
  WHERE userID = 'UserA' 
ON DUPLICATE KEY 
-- Set value of `brokeage` for UserB to the one set for UserA, from the SELECT
UPDATE brokeage = t.brokeage 

关于mysql - 基数违规 : 1242 Subquery returns more than 1 row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388667/

相关文章:

一个表中最常出现在另一表中的 MYSQL 条目

c# - 将图像加载到 C#,然后插入到 MySQL 表中

mysql - 按序列号分组的日期选择最新条目

PHP,基于循环迭代做mysql更新

mysql - 如何将HTML字符编码数据正确加载到My Sql数据库中?

java - 查询多对多关系数据库表

mysql - phpmyadmin - 将新列导入现有记录

python - 更新 MySQL 中的数百万行——何时提交

使用 where 子句的 MySQL 索引

java - MySQL 无法从远程客户端连接