← Alle AufgabenSQL · Middle

Produkte, die nie bestellt wurden

Liste Produkte auf, die in keiner Zeile von order_items vorkommen: Spalten id und name, sortiert nach id. Beachte, dass product_id NULL sein kann (das Produkt wurde gelöscht).

Tabellen

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

Tests (3)

Jeder Test füllt die Tabellen mit eigenen Daten und vergleicht das Ergebnis deiner Abfrage mit dem erwarteten: dieselben Spalten (Namen und Reihenfolge) und dieselben Zeilen in derselben Reihenfolge, ORDER BY zählt also. Die Abfrage läuft in echtem PostgreSQL direkt im Browser; der erste Start lädt es herunter (etwa 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);