Mysql 1093 号错误 及解决

转载自 http://home.blueidea.com/space.php?uid=164225&do=blog&id=6586
Mysql 1093 号错误 及解决

要做这样一个功能:
主表中有一ID对应副表中多个记录(一对多)。
现在给一组新值,如果在副表中存在,则保留,不存在,则插入(插入不在本话题讨论范围内)。如果旧记录的某个值不存在于这组新值中,则删除。比方:新值: a,b,f 以存在的旧值:a,b,c,e,现在要把c,e删除了,把 f 插进去。

开始我这样写:


DELETE FROM USNOWER_ART_KEYWORD WHERE ID IN (
SELECT
A.ID
FROM
USNOWER_ART_KEYWORD A LEFT JOIN
USNOWER_KEYWORD B ON A.KEYWORD = B.ID
WHERE
A.ART = 13 AND
B.KEYWORD NOT IN ('usnower','fashion')
);

mysql 报错:ERROR 1093 (HY000): You can't specify target table 'USNOWER_ART_KEYWORD' for update in FROM clause
以前做ORACLE的时候,碰到过变异表的问题:http://xling.blueidea.com/archives/2006/3012.shtml,我想这个也许和那个有点相似吧。

查了查百度,我做了一点修改:

DELETE FROM USNOWER_ART_KEYWORD WHERE ID IN (
SELECT C.ID FROM(
SELECT
A.ID
FROM
USNOWER_ART_KEYWORD A LEFT JOIN
USNOWER_KEYWORD B ON A.KEYWORD = B.ID
WHERE
A.ART = 13 AND
B.KEYWORD NOT IN ('usnower','fashion')
) C
);

即多出来一层SELECT。
问题解决。

你可能感兴趣的:(oracle,C++,c,mysql,百度)