ich dieses Datenbankschema haben:eine Abfrage schreiben zu kombinieren Ergebnisse aus mehreren Tabellen mit allen möglichen Kombinationen
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name char(50) NOT NULL UNIQUE
);
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name char(50) NOT NULL,
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
uid INTEGER REFERENCES users (id) NOT NULL,
pid INTEGER REFERENCES products (id) NOT NULL,
quantity INTEGER NOT NULL,
price FLOAT NOT NULL CHECK (price >= 0)
);
Ich versuche, eine Abfrage zu schreiben, die mir alle Kombinationen von Benutzern und Produkte geben wird, sowie der Gesamtbetrag, den der Benutzer für dieses Produkt ausgegeben hat. Insbesondere wenn ich 5 Produkte und 5 Benutzer habe, sollte es 25 Zeilen in der Tabelle geben. Im Moment habe ich eine Abfrage, die fast die Arbeit erledigt, aber wenn der Benutzer dieses Produkt noch nie gekauft hat, dann wird überhaupt keine Zeile gedruckt.
Hier ist, was ich bisher geschrieben habe:
SELECT u.name as username, p.name as productname, SUM(o.quantity * o.price) as totalPrice
FROM users u, orders o, products p
WHERE u.id = o.uid
AND p.id = o.pid
GROUP BY u.name, p.name
ORDER BY u.name, p.name
Ich vermute, dass dies eine Art von Join erfordert, aber mein SQL Wissen ist begrenzt, und ich bin nicht sicher, was der beste Weg wäre, um zu gehen Dies tun. Ich denke, wenn jemand mir helfen kann, das herauszufinden, dann werde ich ein viel besseres Verständnis haben.
mysql! = Postgresql – shmosel
Ihr SQL-Dialekt sieht wie Postgres aus, also habe ich das MySQL-Tag entfernt. –
Sie müssen einen CROSS JOIN erstellen und dann das Ergebnis LEFT mit Ihrer Tabelle verknüpfen. –