Pertanyaan Bagaimana saya bisa melakukan pernyataan UPDATE dengan JOIN di SQL?


Saya perlu memperbarui tabel ini di SQL Server 2005 dengan data dari tabel 'induknya', lihat di bawah:

penjualan

id (int)
udid (int)
assid (int)

ud

id  (int)
assid  (int)

sale.assid berisi nilai yang benar untuk diperbarui ud.assid.

Pertanyaan apa yang akan dilakukan ini? Saya sedang berpikir a join tapi aku tidak yakin apakah itu mungkin.


1022
2017-08-18 11:40


asal


Jawaban:


Sintaks ketat tergantung pada SQL DBMS yang Anda gunakan. Berikut adalah beberapa cara untuk melakukannya di ANSI / ISO (alias harus bekerja pada semua DBMS SQL), MySQL, SQL Server, dan Oracle. Harap diketahui bahwa metode ANSI / ISO saya yang disarankan biasanya akan jauh lebih lambat daripada dua metode lainnya, tetapi jika Anda menggunakan SQL DBMS selain dari MySQL, SQL Server, atau Oracle, maka itu mungkin satu-satunya cara untuk pergi (misalnya jika SQL DBMS Anda tidak mendukung MERGE):

ANSI / ISO:

update ud 
     set assid = (
          select sale.assid 
          from sale 
          where sale.udid = ud.id
     )
 where exists (
      select * 
      from sale 
      where sale.udid = ud.id
 );

MySQL:

update ud u
inner join sale s on
    u.id = s.udid
set u.assid = s.assid

Server SQL:

update u
set u.assid = s.assid
from ud u
    inner join sale s on
        u.id = s.udid

Peramal:

update
    (select
        u.assid as new_assid,
        s.assid as old_assid
    from ud u
        inner join sale s on
            u.id = s.udid) up
set up.new_assid = up.old_assid

SQLite:

update ud 
     set assid = (
          select sale.assid 
          from sale 
          where sale.udid = ud.id
     )
 where RowID in (
      select RowID 
      from ud 
      where sale.udid = ud.id
 );

1925
2017-08-18 11:44



Ini harus bekerja di SQL Server:

update ud 
set assid = sale.assid
from sale
where sale.udid = id

110
2017-08-18 11:42



postgres

UPDATE table1
SET    COLUMN = value
FROM   table2,
       table3
WHERE  table1.column_id = table2.id
       AND table1.column_id = table3.id
       AND table1.COLUMN = value
       AND table2.COLUMN = value
       AND table3.COLUMN = value 

82
2018-01-17 13:53



Pendekatan SQL standar akan

UPDATE ud
SET assid = (SELECT assid FROM sale s WHERE ud.id=s.id)

Di SQL Server Anda bisa menggunakan gabung

UPDATE ud
SET assid = s.assid
FROM ud u
JOIN sale s ON u.id=s.id

39
2017-08-18 11:44



PostgreSQL:

CREATE TABLE ud (id integer, assid integer);
CREATE TABLE sales (id integer, udid integer, assid integer);

UPDATE ud
SET assid = sales.assid
FROM sales
WHERE sales.id = ud.id;

27
2018-03-07 21:35



Kueri pembaruan yang disederhanakan menggunakan IKUT-beberapa tabel.

   UPDATE
        first_table ft
        JOIN second_table st ON st.some_id = ft.some_id
        JOIN third_table tt  ON tt.some_id = st.some_id
        .....
    SET
        ft.some_column = some_value
    WHERE ft.some_column = 123456 AND st.some_column = 123456

Catatan - first_table, second_table, third_table, dan some_column seperti 123456 adalah nama tabel demo, nama kolom, dan id. Gantilah dengan nama yang valid.


18
2017-07-14 07:15



Contoh lain mengapa SQL tidak benar-benar portabel.

Untuk MySQL, itu akan menjadi:

update ud, sale
set ud.assid = sale.assid
where sale.udid = ud.id;

Untuk info lebih lanjut, baca beberapa pembaruan tabel: http://dev.mysql.com/doc/refman/5.0/en/update.html

UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]

12
2017-11-16 19:17



Teradata Aster menawarkan cara lain yang menarik bagaimana mencapai tujuan:

MERGE INTO ud --what trable should be updated
USING sale -- from what table/relation update info should be taken
ON ud.id = sale.udid --join condition
WHEN MATCHED THEN 
    UPDATE SET ud.assid = sale.assid; -- how to update

8
2017-07-03 10:22