关于SQL DELETE嵌套子查询问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SQL DELETE嵌套子查询问题相关的知识,希望对你有一定的参考价值。

我要删除一个名为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子句不能使用一个判断同样的表的子查询,那好,我想知道为什么.
先谢过.

子查询: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'
参考技术A DELETE FROM stock
WHERE 1 = (
SELECT COUNT(*)
FROM stock
WHERE stock.manu_code = '145378'
)
似乎等价于DELETE FROM stock WHERE 1 = 1
另外楼主真有钻牛角尖的精神,期待其他答案
参考技术B 两个不等价
第一个是删除 stock.manu_code = '145378'这些记录。
第二个只要条件成立(count(*)=1),就删除所有记录。

以上是关于关于SQL DELETE嵌套子查询问题的主要内容,如果未能解决你的问题,请参考以下文章

求SQL相关子查询和嵌套子查询通俗的区别 ?

SQL相关子查询和嵌套子查询的区别

子查询(嵌套子查询)

相关子查询 与 嵌套子查询 有何区别 ?

SQL嵌套子查询和相关子查询的执行过程有啥区别

SQL嵌套子查询和相关子查询的执行过程有啥区别