← Wszystkie zadaniaSQL · Middle

Produkty, których nigdy nie zamówiono

Wypisz produkty, których nie ma w żadnym wierszu order_items: kolumny id i name, według id. Uwaga: product_id może być NULL (produkt usunięto).

Tabele

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
);

Testy (3)

Każdy test wypełnia tabele własnymi danymi i porównuje wynik twojego zapytania z oczekiwanym: te same kolumny (nazwy i kolejność) i te same wiersze w tej samej kolejności, więc ORDER BY ma znaczenie. Zapytanie działa w prawdziwym PostgreSQL prosto w przeglądarce; pierwsze uruchomienie go pobiera (około 5 MB).

  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);