第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不能指定目標(biāo)表以便在FROM子句中更新

不能指定目標(biāo)表以便在FROM子句中更新

慕少森 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個贊

問題是MySQL,無論出于什么愚蠢的原因,都不允許您編寫這樣的查詢:

UPDATE myTableSET myTable.A =(
    SELECT B    FROM myTable    INNER JOIN ...)

也就是說,如果你做的是UPDATE/INSERT/DELETE在表上,不能在內(nèi)部查詢中引用該表(你能,會,可以然而,引用外表中的字段.)


的解決方案是替換myTable在子查詢中(SELECT * FROM myTable),就像這樣

UPDATE myTableSET myTable.A =(
    SELECT B    FROM (SELECT * FROM myTable) AS something    INNER JOIN ...)

這顯然會導(dǎo)致將必要的字段隱式復(fù)制到臨時表中,因此是允許的。

我找到了這個解決方案這里..該條的說明:

你不會想SELECT * FROM table在現(xiàn)實生活中的子查詢中,我只想保持示例的簡單性。實際上,您只應(yīng)該在最內(nèi)部的查詢中選擇所需的列,并添加一個好的WHERE子句來限制結(jié)果。


查看完整回答
反對 回復(fù) 2019-06-15
?
德瑪西亞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


查看完整回答
反對 回復(fù) 2019-06-15
?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

在MySQL中,不能通過子查詢同一個表來更新一個表。

可以將查詢分為兩部分,或執(zhí)行以下操作

 UPDATE TABLE_A AS A
 INNER JOIN TABLE_A AS B ON A.field1 = B.field1
 SET field2 = ?


查看完整回答
反對 回復(fù) 2019-06-15
  • 3 回答
  • 0 關(guān)注
  • 890 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號