[sql] SQL Server에서 JOIN으로 UPDATE 문을 어떻게 수행 할 수 있습니까?

SQL Server 에서이 테이블을 ‘부모’테이블의 데이터 로 업데이트해야합니다 ( 아래 참조).

테이블 : 판매

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

테이블 : ud

id  (int)
assid  (int)

sale.assid업데이트 할 올바른 값을 포함합니다 ud.assid.

어떤 쿼리를 수행합니까? 나는 생각하고 join있지만 가능 여부는 확실하지 않습니다.



답변

구문은 사용중인 SQL DBMS에 따라 다릅니다. 다음은 ANSI / ISO (일명 SQL DBMS에서 작동해야 함), MySQL, SQL Server 및 Oracle에서 수행하는 몇 가지 방법입니다. 필자가 제안한 ANSI / ISO 방법은 일반적으로 다른 두 방법보다 훨씬 느리지 만 MySQL, SQL Server 또는 Oracle 이외의 SQL DBMS를 사용하는 경우 갈 수있는 유일한 방법 일 수 있습니다 (예 : SQL DBMS가 지원하지 않는 경우 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

SQL 서버 :

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

PostgreSQL :

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

FROMPostgres 절 에서 대상 테이블을 반복해서는 안됩니다 .

신탁:

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
 );


답변

이것은 SQL Server에서 작동합니다.

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


답변

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 


답변

표준 SQL 접근 방식은

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

SQL Server에서는 조인을 사용할 수 있습니다

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


답변

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;


답변

JOIN -ing 다중 테이블을 사용한 단순화 된 업데이트 쿼리

   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

참고 -first_table, second_table, third_table 및 123456과 같은 some_column은 데모 테이블 이름, 열 이름 및 ID입니다. 유효한 이름으로 바꾸십시오.


답변

SQL을 실제로 이식 할 수없는 또 다른 예입니다.

MySQL의 경우 다음과 같습니다.

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

자세한 내용은 여러 테이블 업데이트를 참조하십시오 .
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]