當我正在學習數據庫系統的講座時,我嘗試了演講幻燈片中提供的代碼,但沒有工作。這個例子是從表中刪除一些元組。從表中刪除多行(SQL)
示例:從啤酒(名稱,manf)中刪除同一製造商生產的其他啤酒的所有啤酒。 而在滑動中提供的代碼如下:
DELETE FROM Beers b
WHERE EXISTS(
SELECT name
FROM Beers
WHERE manf = b.manf AND name <> b.name);
我創建啤酒表並插入兩行如下:
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');
和測試代碼。根據講座,它應該刪除啤酒中的所有元組,但是,代碼不工作,並保持顯示 「您無法在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兩次。有人可以解釋這個代碼是如何工作的嗎?
的可能重複做同樣的[刪除 - 我不能指定目標表?](https://stackoverflow.com/questions/5816840/delete-i-cant-specify-target-table) – Parfait