2013-05-10 9 views
11

Diese Art der Sache wurde ein paar Mal zuvor gefragt, aber ist nicht ganz das, was ich suche. Ich brauche SET zwei Zeilen gleich verschiedenen Teilen einer Unterabfrage.Aktualisieren Sie mehrere Spalten von Unterabfrage

Ich bin derzeit mit:

UPDATE records 
SET leads=(SELECT COUNT(*) FROM leads_table WHERE leads_table.blah=records.blah), 
earnings=(SELECT SUM(amount) FROM leads_table WHERE leads_table.blah=records.blah) 

Die WHERE Aussagen waren offensichtlich vereinfacht ... aber im Grunde ist es das gleiche Unterabfrage, aber ich glaube nicht, dass ich es zweimal laufen?

ich so etwas tun wollen ...

UPDATE records 
SET (leads,earnings)=(SELECT COUNT(*),SUM(amount) FROM leads_table WHERE leads_table.blah=records.blah) 

Antwort

26

Sie können einfach die Tabelle in einer Unterabfrage kommen, die einige Berechnungen,

UPDATE records a 
     INNER JOIN 
     (
      SELECT blah, 
        COUNT(*) totalCount, 
        SUM(amount) totalSum 
      FROM leads_table 
      GROUP BY blah 
     ) b ON b.blah = a.blah 
SET  a.leads = b.totalCount 
     a.earnings = b.totalSum 
+1

Sehr schöne Lösung .... +1 – sarwar026

+0

Schön in der Tat, elegant und schnell. – Daddy32

+1

Ist es schnell? Würde es nicht für jedes Blah zählen/zählen, selbst wenn du nur eins auswählst? – nbransby

Verwandte Themen