我知道这个错误的原因,但我不知道如何修复它。这是情况:
我有一个tableA,它包含下一列userID
,switch
,plateType
,groupVal
,brokeage
。
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行
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
。我希望我能说清楚,有人可以给出答案。
答案 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