Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Удаление данных из таблицы по условию


Автор: SQL123 12.11.2022, 20:20
Помогите, пожалуйста, решить задание. Уже всю голову сломал.

Задание
Из таблицы author удалить всех авторов, книги которых ни разу не заказывали.

Структура таблиц:
author (author_id, name_author);
genre (genre_id , name_genre);
book (book_id, title, author_id, genre_id, price, amount);
city (city_id, name_city, days_delivery);
client (client_id, name_client, city_id, email);
buy (buy_id, buy_description, client_id);
buy_book (buy_book_id, buy_id, book_id, amount);
step (step_id, name_step);
buy_step (buy_step_id, buy_id, step_id, date_step_beg, date_step_end);               

Результат (первые строки таблицы author):
+-----------+------------------+
| author_id | name_author      |
+-----------+------------------+
| 1         | Булгаков М.А.    |
           ...
+-----------+------------------+


Мое неправильное решение:

WITH authors_wo_sales AS 
(  
 SELECT author.author_id, COUNT(buy_book.book_id) as salescount  
 FROM author  
 LEFT JOIN book ON author.author_id = book.author_id  
 LEFT JOIN buy_book ON book.book_id = buy_book.book_id  
)  
DELETE author FROM author  
INNER JOIN authors_wo_sales ON authors_wo_sales.author_id = author.author_id  
WHERE authors_wo_sales.salescount = 0;


Автор: Akina 12.11.2022, 22:39
Схематично:
Код

DELETE автор
FROM авторы
WHERE NOT EXISTS (
    SELECT NULL
    FROM заказы
    WHERE заказы.книга = авторы.книга
    )

Возможно, в подзапросе будет участвовать более одной таблицы, типа:
Код

DELETE автор
FROM авторы
WHERE NOT EXISTS (
    SELECT NULL
    FROM заказы
    JOIN книги ON заказы.книга = книги.книга
    WHERE книги.автор = авторы.ID
    )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)