Mysql 1093 号错误 及解决

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。
问题解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值