关于SQL DELETE嵌套子查询问题

我要删除一个名为stock表中manu_code代码为145378的那一行,我可以这样写:DELETEFROMstockWHEREstock.manu_code='145... 我要删除一个名为stock表中manu_code代码为145378的那一行,我可以这样写:
DELETE FROM stock
WHERE stock.manu_code = '145378'
这样肯定是没什么问题的,
但是现在我偏偏要嵌套一个子查询,改写:
DELETE FROM stock
WHERE 1 = (
SELECT COUNT(*)
FROM stock
WHERE stock.manu_code = '145378'
)
两个不是等价吗,为什么后面的那个不行啊
查资料是说:DELETE语句中的WHERE子句不能使用一个判断同样的表的子查询,那好,我想知道为什么.
先谢过.
展开
 我来答
qsc800528
推荐于2018-04-21 · TA获得超过2974个赞
知道大有可为答主
回答量:1383
采纳率:0%
帮助的人:1764万
展开全部
子查询:SELECT COUNT(*)FROM stock WHERE stock.manu_code = '145378'的返回值如果是1的话,你的SQL就会是:
DELETE FROM stock WHERE 1 = 1
那么就会把所有数据删除的,所以SQL可以如下:
DELETE FROM stock WHERE 1 = (SELECT COUNT(*) FROM stock WHERE stock.manu_code = '145378') AND stock.manu_code = '145378'
传说中的鹰王
2010-03-11 · TA获得超过1053个赞
知道小有建树答主
回答量:923
采纳率:87%
帮助的人:550万
展开全部
DELETE FROM stock
WHERE 1 = (
SELECT COUNT(*)
FROM stock
WHERE stock.manu_code = '145378'
)
似乎等价于DELETE FROM stock WHERE 1 = 1
另外楼主真有钻牛角尖的精神,期待其他答案
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我要注册和登录
2010-03-11 · TA获得超过451个赞
知道小有建树答主
回答量:301
采纳率:100%
帮助的人:419万
展开全部
两个不等价
第一个是删除 stock.manu_code = '145378'这些记录。
第二个只要条件成立(count(*)=1),就删除所有记录。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式