Pertanyaan Fungsi Agregat dalam kueri pembaruan SQL?


Saya mencoba untuk menetapkan nilai dalam satu tabel ke jumlah nilai di tabel lain. Sesuatu di sepanjang garis-garis ini:

UPDATE table1
SET field1 = SUM(table2.field2)
FROM table1
INNER JOIN table2 ON table1.field3 = table2.field3
GROUP BY table1.field3

Tentu saja, karena ini berdiri, itu tidak akan berhasil - SET tidak mendukung SUM dan itu tidak mendukung GROUP BY.

Saya harus tahu ini, tetapi pikiran saya menggambar kosong. Apa yang saya lakukan salah?


75
2018-01-05 23:25


asal


Jawaban:


UPDATE t1
SET t1.field1 = t2.field2Sum
FROM table1 t1
INNER JOIN (select field3, sum(field2) as field2Sum
   from table2
  group by field3) as t2
on t2.field3 = t1.field3  

123
2018-01-05 23:32



Menggunakan:

UPDATE table1
   SET field1 = (SELECT SUM(t2.field2) 
                   FROM TABLE2 t2 
                  WHERE t2.field3 = field2)

8
2018-01-05 23:30



Atau Anda bisa menggunakan campuran JBrooks dan OMG Ponies jawaban:

UPDATE table1
   SET field1 = (SELECT SUM(field2)
                   FROM table2 AS t2
                  WHERE t2.field3 = t1.field3)
  FROM table1 AS t1

5
2018-01-05 23:37



Situasi yang baik untuk menggunakan CROSS APPLY

UPDATE t1
   SET t1.field1 = t2.field2Sum
  FROM table1 t1
 CROSS APPLY (SELECT SUM(field2) as field2Sum
                FROM table2 t2
               WHERE t2.field3 = t1.field3) AS t2

3
2017-08-14 23:44



Saya tahu pertanyaannya adalah tag SQL Server tetapi hati-hati dengan UPDATE dengan JOIN jika Anda menggunakan PostgreSQL. Jawaban @JBrooks tidak akan berfungsi:

UPDATE t1
SET t1.field1 = t2.field2Sum
FROM table1 t1
INNER JOIN (...) as t2
on t2.field3 = t1.field3  

Anda harus menyesuaikannya dengan:

UPDATE table1 t1
SET t1.field1 = t2.field2Sum
FROM (...) as t2
WHERE t2.field3 = t1.field3  

Lihat parameter from_list adalah dokter untuk mendapatkan alasannya FROM dianggap oleh PostgreSQL sebagai self-join: https://www.postgresql.org/docs/9.5/static/sql-update.html#AEN89239


0
2018-04-25 16:38