【发布时间】:2018-04-02 17:47:24
【问题描述】:
当我学习数据库系统的讲座时,我尝试了讲座幻灯片中提供的代码,但没有奏效。示例是从表中删除一些元组。
示例:从 Beers(name, manf) 中删除同一制造商的其他啤酒的所有啤酒。 幻灯片中提供的代码如下:
DELETE FROM Beers b
WHERE EXISTS(
SELECT name
FROM Beers
WHERE manf = b.manf AND name <> b.name);
我创建 Beers 表并插入两行如下:
create table Beers(
name CHAR(30) primary key,
manf CHAR(30)
);
insert into Beers(name, manf)
values('Bud', 'A-B');
insert into Beers
values('Bud-lite', 'A-B');
并测试代码。根据讲座,它应该删除 Beers 中的所有元组,但是,代码不起作用并一直显示 “您不能在 FROM 子句中指定目标表 'Beers' 进行更新。当我在 SQL 上运行删除操作时。
谁能告诉我代码有什么问题?谢谢!
添加注释: 只是发现 MySQL 不能运行之前的代码,但可以运行这个:
Delete from Beers
where exists(
select a.name from(select b.name from Beers b
where manf = b.manf AND name!= b.name) as a);
但我仍然不知道为什么我们需要在里面使用 select 两次。有人能解释一下这段代码是如何工作的吗?
【问题讨论】:
标签: mysql sql sql-delete delete-row