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.

InformationsquelleAutor uisky | 2012-03-03
Schreibe einen Kommentar