mysql> UPDATE EACONTACTGROUPS A
SET GROUPNAME=(SELECT CONCAT(B.GROUPNAME,'-',A.GROUPNAME) FROM EACONTACTGROUPS B WHERE B.CORPID=A.CORPID AND B.USERID=A.USERID AND B.GROUPID=A.PARENTGROUPID)
WHERE A.PARENTGROUPID IS NOT NULL;
ERROR 1093 (HY000): You can't specify target table 'A' for update in FROM clause
涓婇潰鏄洰鍓峂YSQL5.0浠嶇劧鏈夌殑闄愬埗錛屾枃妗d腑璇達(dá)細(xì)
In general, you cannot modify a table and select from the same table in a subquery. For example, this limitation applies to statements of the following forms:
DELETE FROM t WHERE ... (SELECT ... FROM t ...);UPDATE t ... WHERE col = (SELECT ... FROM t ...);{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);
Exception: The preceding prohibition does not apply if you are using a subquery for the modified table in the
FROM
clause. Example:
UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...) AS _t ...);
Here the prohibition does not apply because a subquery in the
FROM
clause is materialized as a temporary table, so the relevant rows in
t
have already been selected by the time the update to
t
takes place. 渚濇嵁鏂囨。錛屾敼鎴愪笅闈㈢殑鏍峰瓙灝辮浜?jiǎn)锛?xì)
mysql> UPDATE EACONTACTGROUPS A
SET GROUPNAME=(SELECT CONCAT(B.GROUPNAME,'-',A.GROUPNAME) FROM ( SELECT GROUPNAME,CORPID,USERID,GROUPID,PARENTGROUPID FROM EACONTACTGROUPS) B
WHERE B.CORPID=A.CORPID AND B.USERID=A.USERID AND B.GROUPID=A.PARENTGROUPID)
WHERE A.PARENTGROUPID IS NOT NULL;
Query OK, 16 rows affected (0.01 sec)
Rows matched: 16 Changed: 16 Warnings: 0
娉?浠婂ぉ鍐欎竴涓垹闄よ鍙ユ椂鎵懼埌鐨勪竴鐐硅祫鏂?瑙e喅浜?jiǎn)涓涓畝鍗曠殑鍒犻櫎璇彞.鍛靛懙,浠ュ悗娉ㄦ剰浜?
鍘熷彞:delete from menu_item where parent_id =(select menu_item_id from menu_item where menu_data like '%manageVendors%');
淇敼鍚?delete from menu_item where parent_id =(select temp.menu_item_id from (select m.menu_item_id,m.menu_data from menu_item m) temp where temp.menu_data like '%manageVendors%');
寰堜箙娌掔敤鏁告摎搴簡(jiǎn)錛屽鐨勭珶鐒墮f壒閲忔彃琛ㄩ兘蹇樿?shù)簡(jiǎn)銆傚湪閫欓噷璁板綍涓涓嬨?/p>
鎶婅〃B涓殑瀛楁錛屾彃鍏ュ埌琛ˋ涓紱
INSERT INTO 琛ˋ(瀛楁鍚?, 瀛楁鍚?, ……) SELECT (瀛楁鍚?, 瀛楁鍚?, ……) FROM 琛˙;