关于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子句不能使用一个判断同样的表的子查询,那好,我想知道为什么.
先谢过. 展开
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'
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'
展开全部
DELETE FROM stock
WHERE 1 = (
SELECT COUNT(*)
FROM stock
WHERE stock.manu_code = '145378'
)
似乎等价于DELETE FROM stock WHERE 1 = 1
另外楼主真有钻牛角尖的精神,期待其他答案
WHERE 1 = (
SELECT COUNT(*)
FROM stock
WHERE stock.manu_code = '145378'
)
似乎等价于DELETE FROM stock WHERE 1 = 1
另外楼主真有钻牛角尖的精神,期待其他答案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个不等价
第一个是删除 stock.manu_code = '145378'这些记录。
第二个只要条件成立(count(*)=1),就删除所有记录。
第一个是删除 stock.manu_code = '145378'这些记录。
第二个只要条件成立(count(*)=1),就删除所有记录。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询