2013-05-10 14 views
11

Tego typu rzeczy zadawano już kilka razy wcześniej, ale nie jest to dokładnie to, czego szukam. Muszę SET dwa wiersze równe różne części podzapytania.Zaktualizuj wiele kolumn z podzapytania

Obecnie używam:

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) 

WHERE oświadczenia zostały oczywiście uproszczone ... ale przede wszystkim jego samego Podzapytanie ale nie sądzę, należy uruchomić go dwa razy?

chcę zrobić coś takiego ...

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

Odpowiedz

26

można po prostu dołączyć do tabeli w podkwerendzie że zrobić kilka obliczeń,

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

Bardzo ładne rozwiązanie .... +1 – sarwar026

+0

Naprawdę, elegancko i szybko. – Daddy32

+1

Czy to szybko? Czy nie wyliczyłby on sumy/sumy za każdy bla, nawet jeśli wybierasz tylko jeden? – nbransby