原报错语句:
INSERT INTO table_B (
userId,userCode,nickName,phone,addTime
)
VALUES
(
(SELECT((SELECT `userId` FROM table_B ORDER BY `userId` DESC LIMIT 0,1) + 1)),
(SELECT REPLACE (uuid(), '-', '')),
'nicky',
(SELECT lxfs FROM table_A ORDER BY cjsj DESC LIMIT 0,1),
now()
);
查找网上的资料,据说这个问题只出现于MySQL,MSSQL和Oracle不会出现此问题,
而原因是不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。
解决办法:将SELECT出的结果再通过中间表SELECT一遍。
调整后 sql 语句可以正常执行:
INSERT INTO table_B (
userId,userCode,nickName,phone,addTime
)
VALUES
(
(SELECT USERID FROM (SELECT((SELECT `userId` FROM table_B ORDER BY `userId` DESC LIMIT 0,1) + 1) USERID) U),
(SELECT REPLACE (uuid(), '-', '')),
'nicky',
(SELECT lxfs FROM table_A ORDER BY cjsj DESC LIMIT 0,1),
now()
);
网友评论