从 table (SQL) 中删除多行
Delete multiple rows from a table (SQL)
我在学习数据库系统的讲座时,尝试了讲座幻灯片中提供的代码,但没有成功。该示例是从 table.
中删除一些元组
示例:从 Beers(name, manf) 中删除同一制造商生产的另一种啤酒的所有啤酒。
幻灯片中提供的代码如下:
DELETE FROM Beers b
WHERE EXISTS(
SELECT name
FROM Beers
WHERE manf = b.manf AND name <> b.name);
我创建啤酒 table 并按如下方式插入两行:
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 子句中为更新指定目标 table '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);
但是我仍然不知道为什么我们需要在exists里面使用两次select。有人可以解释一下这段代码是如何工作的吗?
在 mysql 和 update/delete 期间你不能使用相同的 table,或者你可以使用 JOIN
做同样的事情
DELETE a
FROM Beers a
JOIN Beers b ON a.manf = b.manf
AND a.name <> b.name
/* WHERE a.manf = 'A-B' is not necessary */
我在学习数据库系统的讲座时,尝试了讲座幻灯片中提供的代码,但没有成功。该示例是从 table.
中删除一些元组示例:从 Beers(name, manf) 中删除同一制造商生产的另一种啤酒的所有啤酒。 幻灯片中提供的代码如下:
DELETE FROM Beers b
WHERE EXISTS(
SELECT name
FROM Beers
WHERE manf = b.manf AND name <> b.name);
我创建啤酒 table 并按如下方式插入两行:
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 子句中为更新指定目标 table '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);
但是我仍然不知道为什么我们需要在exists里面使用两次select。有人可以解释一下这段代码是如何工作的吗?
在 mysql 和 update/delete 期间你不能使用相同的 table,或者你可以使用 JOIN
DELETE a
FROM Beers a
JOIN Beers b ON a.manf = b.manf
AND a.name <> b.name
/* WHERE a.manf = 'A-B' is not necessary */