← Усі задачіSQL · Middle

Товари, які ніколи не замовляли

Виведіть товари, яких немає в жодному рядку order_items: колонки id і name, за id. Зверніть увагу: product_id може бути NULL (товар видалили).

Таблиці

CREATE TABLE products (
  id   int PRIMARY KEY,
  name text NOT NULL
);

CREATE TABLE order_items (
  order_id   int NOT NULL,
  product_id int,  -- NULL: the product was deleted
  quantity   int NOT NULL
);

Тести (3)

Кожен тест заповнює таблиці своїми даними й порівнює результат вашого запиту з очікуваним: ті самі колонки (назви й порядок) і ті самі рядки в тому самому порядку, тож ORDER BY важливий. Запит виконується в справжньому PostgreSQL просто в браузері; перший запуск завантажує його (близько 5 МБ).

  1. INSERT INTO products VALUES (1, 'Mug'), (2, 'Tea'), (3, 'Pen');
    INSERT INTO order_items VALUES (100, 1, 2), (101, 1, 1);
  2. -- a NULL product_id: NOT IN returns nothing here
    INSERT INTO products VALUES (1, 'Mug'), (2, 'Tea'), (3, 'Pen');
    INSERT INTO order_items VALUES (100, 2, 1), (101, NULL, 1);
  3. -- every product was ordered
    INSERT INTO products VALUES (1, 'Mug');
    INSERT INTO order_items VALUES (100, 1, 1);