使用内连接从 mql table 中删除行

Deleting row from mql table using inner join

我目前正在尝试从我的 table 中删除分数低于 -4 或更低的电影,我想使用 "delete from" 和 "inner join"来自 MySQL。但是我遇到了一个语法错误,我在多个不同的线程上查找过,但 none 似乎可以修复它。 这是我的 tables

       +-------------------+
       | Tables_in_lab_4_8 |
       +-------------------+
       | movies            |
       | reviews           |
       +-------------------+

这是我的评论 table。您将不需要电影 table.

    +-----------+----------+-------+---------------------+
    | review_id | movie_id | score | comments            |
    +-----------+----------+-------+---------------------+
    |         1 |        2 |     5 | god-like            |
    |         2 |        3 |    -5 | Everyone died, why? |
    |         3 |        4 |     2 | Meh                 |
    |         4 |        5 |     6 | Greak kids movie    |
    |         5 |        2 |     3 | Could be better     |
    +-----------+----------+-------+---------------------+

所以显然我想删除 movie_id 3 因为它的分数低于 -4。这是我尝试键入的内容以及随之而来的语法错误。关于我应该做什么的任何建议?

    update movies join reviews on reviews.movie_id = movies.movie_id delete review_id from review_id inner join movie_id where score <= -4;

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'delete review_id from review_id inner join movie_id where score <= -4' at line 1

如果你想删除至少有一篇评论评分低于-4的电影,你可以使用exists和一个相关的子查询:

delete from movies
where exists (
    select 1 
    from reviews r 
    where r.movie_id = movie.movie_id and r.score < -4
)

请注意,这实际上会在 reviews table 中留下孤立行;你应该确保你有一个启用了 delete cascade 的外键以避免这种情况。