Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Intern — Senior
9
SQL‑запрос для получения работ без привязанных материалов
Компании, где спрашивали:
ГК Адепт
Условие задачи
В задаче дано две связанные таблицы — works и materials. Нужно составить запрос, который вернёт только те записи из works, для которых в таблице materials нет ни одной строки.
CREATE TABLE works
(
id BIGSERIAL PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE materials
(
id SERIAL PRIMARY KEY,
name VARCHAR(255),
quantity INTEGER,
work_id BIGINT,
FOREIGN KEY (work_id) REFERENCES works(id) ON DELETE CASCADE
);
INSERT INTO works(id, name)
VALUES (1, 'work 1'),
(2, 'work 2'),
(3, 'work 3');
INSERT INTO materials(id, name, quantity, work_id)
VALUES (1, 'mat 1', 10, 1),
(2, 'mat 2', 20, 2),
(3, 'mat 2', 15, 2),
(4, 'mat 4', 30, 2);
Требуется написать запрос, который при выполнении над указанными данными вернёт только work 3, поскольку у него нет связанных записей в materials.
Подсказка: подойдёт конструкция LEFT JOIN … ON … WHERE materials.id IS NULL либо NOT EXISTS/NOT IN.