我知道这个错误的原因,但我不知道如何解决它。情况如下:
我有一个表格,上面有下一列userIDswitchplateTypegroupValbrokeageuserID
plateTypegroupValgroupVal表示唯一的键。userIdplateType可能有许多不同的值,但userId只能有4个(A、B、C、D)。
一个groupVal和一个tableA的记录示例如下:

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子查询返回多行
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')

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

最佳答案

您需要引用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

07-26 01:07