基数违规:1242子查询返回超过1行

时间:2014-01-27 18:26:17

标签: mysql

我知道这个错误的原因,但我不知道如何修复它。这是情况: 我有一个tableA,它包含下一列userIDswitchplateTypegroupValbrokeageuserIDplateTypegroupVal代表唯一键。 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

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

  

基数违规:1242子查询返回超过1行

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的{​​1}}和plateTypes。我希望我能说清楚,有人可以给出答案。

1 个答案:

答案 0 :(得分:1)

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