Mysql 基数冲突:1242子查询返回超过1行

Mysql 基数冲突:1242子查询返回超过1行,mysql,Mysql,我知道这个错误的原因,但我不知道如何修复它。情况如下: 我有一个tableA,它的下一列是userID,switch,plateType,groupVal,brokerage。 userID,plateType和groupVal代表一个唯一的键groupVal和userId可以采用许多不同的值,但plateType只能有4个值(A、B、C、D)。 一个userId和一个groupVal的记录示例如下: Userid-------plateType------ groupVal------- br

我知道这个错误的原因,但我不知道如何修复它。情况如下: 我有一个tableA,它的下一列是
userID
switch
plateType
groupVal
brokerage
userID
plateType
groupVal
代表一个唯一的键
groupVal
userId
可以采用许多不同的值,但
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
因此,当我运行下一个查询时,如果该记录不存在,则将创建该记录,但如果它们存在,则应更新它们,但我得到的错误是:

基数冲突:1242子查询返回超过1行


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

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

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 

这种方法的问题是它会更新,但都具有相同的值。例如,如果userA在plattype D中有3.5个代理,则brpokeage中UserB的所有行都将采用此值。重新阅读您的问题,您甚至不需要子查询,请参阅我的编辑。
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