慕少森
2019-06-15 17:44:20
不能指定目標(biāo)表以便在FROM子句中更新我有一個簡單的MySQL表:CREATE TABLE IF NOT EXISTS `pers` (
`persID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(35) NOT NULL,
`gehalt` int(11) NOT NULL,
`chefID` int(11) DEFAULT NULL,
PRIMARY KEY (`persID`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;INSERT INTO `pers`
(`persID`, `name`, `gehalt`, `chefID`) VALUES(1, 'blb', 1000, 3),(2, 'as', 1000, 3),(3, 'chef', 1040, NULL);我試圖運行以下更新,但只得到了錯誤1093:UPDATE pers P
SET P.gehalt = P.gehalt * 1.05 WHERE (P.chefID IS NOT NULL OR gehalt < (SELECT (
SELECT MAX(gehalt * 1.05)
FROM pers MA
WHERE MA.chefID = MA.chefID)
AS _pers))我搜索了錯誤,并在下面的MySQL頁面中找到http:/dev.mysql.com/doc/reflman/5.1/en/subquery-strations.html但這幫不了我。如何糾正SQL查詢?
3 回答

慕妹3146593
TA貢獻1820條經(jīng)驗 獲得超9個贊
UPDATE myTableSET myTable.A =( SELECT B FROM myTable INNER JOIN ...)
UPDATE
/INSERT
/DELETE
myTable
(SELECT * FROM myTable)
UPDATE myTableSET myTable.A =( SELECT B FROM (SELECT * FROM myTable) AS something INNER JOIN ...)
你不會想 SELECT * FROM table
在現(xiàn)實生活中的子查詢中,我只想保持示例的簡單性。實際上,您只應(yīng)該在最內(nèi)部的查詢中選擇所需的列,并添加一個好的 WHERE
子句來限制結(jié)果。

德瑪西亞99
TA貢獻1770條經(jīng)驗 獲得超3個贊
CREATE TABLE test2 ASSELECT PersId FROM pers pWHERE ( chefID IS NOT NULL OR gehalt < ( SELECT MAX ( gehalt * 1.05 ) FROM pers MA WHERE MA.chefID = p.chefID ))
...
UPDATE pers PSET P.gehalt = P.gehalt * 1.05WHERE PersIdIN ( SELECT PersId FROM test2)DROP TABLE test2;
UPDATE Pers P, ( SELECT PersId FROM pers p WHERE ( chefID IS NOT NULL OR gehalt < ( SELECT MAX ( gehalt * 1.05 ) FROM pers MA WHERE MA.chefID = p.chefID ) )) tSET P.gehalt = P.gehalt * 1.05WHERE p.PersId = t.PersId

縹緲止盈
TA貢獻2041條經(jīng)驗 獲得超4個贊
UPDATE TABLE_A AS A INNER JOIN TABLE_A AS B ON A.field1 = B.field1 SET field2 = ?
添加回答
舉報
0/150
提交
取消