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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

慕少森 2019-06-15 17:44:20
不能指定目標(biāo)表以便在FROM子句中更新我有一個(gè)簡(jiǎn)單的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);我試圖運(yùn)行以下更新,但只得到了錯(cuò)誤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))我搜索了錯(cuò)誤,并在下面的MySQL頁(yè)面中找到http:/dev.mysql.com/doc/reflman/5.1/en/subquery-strations.html但這幫不了我。如何糾正SQL查詢(xún)?
查看完整描述

3 回答

?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

問(wèn)題是MySQL,無(wú)論出于什么愚蠢的原因,都不允許您編寫(xiě)這樣的查詢(xún):

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

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


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

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

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

我找到了這個(gè)解決方案這里..該條的說(shuō)明:

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


查看完整回答
反對(duì) 回復(fù) 2019-06-15
?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以分三步完成:

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


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

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

在MySQL中,不能通過(guò)子查詢(xún)同一個(gè)表來(lái)更新一個(gè)表。

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

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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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