Удаление строки из таблицы MQL с помощью внутреннего соединения - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время я пытаюсь удалить mov ie из моей таблицы, у которого оценка меньше -4 или ниже, и я предполагаю использовать «delete from» и «inner join» из MySQL. Но я получаю синтаксическую ошибку, которую я просмотрел в нескольких разных потоках, но, похоже, ни одна из них не исправляет ее. Вот мои таблицы

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

Вот мои таблицы отзывов. Вам не понадобится таблица фильмов.

    +-----------+----------+-------+---------------------+
    | 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

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы хотите удалить фильмы, которые имеют хотя бы один просмотр с оценкой ниже -4, вы можете использовать exists и соответствующий подзапрос:

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

Обратите внимание, что это фактически оставит сироту строки в таблице reviews; Вы должны убедиться, что у вас есть внешний ключ с включенным delete cascade, чтобы избежать этого.

...