我有下表:
-----------------
| Movie | Genre |
-----------------
| A | Horror |
-----------------
| A | Thiller |
-----------------
| B | Comedy |
-----------------
| C | Drama |
-----------------
| D | Horror |
....
我想删除Movies
的{{1}}。但我知道如果我只是说
Horror
这将是一个错误的查询,因为还有一部电影 - delete * where genre='Horror'
- 因为它也是A
。
Thiller
但我想摆脱| A | Thiller |
。
我应该写什么查询? 我是SQL和关系数据库理论的新手,但我想我们应该首先考虑交叉产品或者加入或者使用该表。
DBMS:MySQL或Oracle。
答案 0 :(得分:2)
delete from movies
where movie in (select movie
from movies
where genre = 'Horror');
以上查询适用于Oracle(以及Postgres和SQL Server以及DB2和Firebird以及H2和HSQLDB和...),但不适用于MySQL。
对于MySQL,需要将其重写为连接:
delete movies
from movies
join movies m2 on movies.movie = m2.movie
where m2.genre = 'Horror';
答案 1 :(得分:0)
MySQL在DELETE中有一个限制,即你无法加入或子查询你要删除的同一个表。但是如果你将所需的id包装在另一个子查询中,它将起作用:
DELETE FROM m
USING movies m
JOIN (
SELECT Movie
FROM movies
WHERE Genre = 'Horror'
) m2: