UPDATE VON der Unterabfrage mit der gleichen Tabelle in der Unterabfrage ' s WO
Habe ich 2 integer-Felder in einer Tabelle "user": leg_count und leg_length. Die erste speichert die Höhe der Beine des Benutzers und die zweite - die totale Länge.
Jedes Bein, das gehört dem Benutzer werden in gesonderten Tabelle, soweit typischer internet-Benutzer kann von null bis unendlich etwas zu niedrig gezielt:
CREATE TABLE legs (
user_id int not null,
length int not null
);
Möchte ich um eine Neuberechnung der Statistiken für alle Benutzer in einer Abfrage, so dass ich versuchen:
UPDATE users SET
leg_count = subquery.count, leg_length = subquery.length
FROM (
SELECT COUNT(*) as count, SUM(length) as length FROM legs WHERE legs.user_id = users.id
) AS subquery;
bekommen und "subquery in FROM kann nicht auf andere Beziehungen der gleichen query level" - Fehler.
Also muss ich tun,
UPDATE users SET
leg_count = (SELECT COUNT(*) FROM legs WHERE legs.user_id = users.id),
leg_length = (SELECT SUM(length) FROM legs WHERE legs.user_id = users.id)
was macht die Datenbank ausführen 2 WÄHLEN Sie für jede Zeile, obwohl die notwendigen Daten ermittelt werden konnte in einer SELECT:
SELECT COUNT(*), SUM(length) FROM legs;
Ist es möglich, zu optimieren meiner Aktualisierungsabfrage verwenden Sie nur eine SELECT-Unterabfrage?
Verwende ich PostgreSQL, aber ich glaube, die Lösung existiert für jede SQL-Dialekt.
TIA.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich tun würde:
users.id
Sie alle.Könnten Sie PostgreSQL erweiterte update-syntax: