[sql] ID 일치에 따라 한 테이블에서 다른 테이블로 SQL 업데이트

나는이있는 데이터베이스를 가지고 account numberscard numbers. 이것들을 파일과 일치시킵니다.update계정 번호로 카드 번호와 번호를 시켜 계정 번호로만 작업하고 있습니다.

테이블을 계정 / 카드 데이터베이스에 연결하여 Table ID및 관련 계정 번호 를 반환하는보기를 만들었으므로 ID가 계정 번호와 일치하는 레코드를 업데이트해야합니다.

이것은이다 Sales_Import테이블, account number필드가 업데이트해야합니다 :

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039

그리고 이것은 RetrieveAccountNumber내가 업데이트해야 할 테이블입니다.

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039

나는 아래를 시도했지만 지금까지 운이 없다.

UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET    [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
                          FROM   RetrieveAccountNumber
                          WHERE  [Sales_Lead].[dbo].[Sales_Import]. LeadID =
                                                RetrieveAccountNumber.LeadID) 

카드 번호를 계좌 번호로 업데이트하지만 계좌 번호는 NULL



답변

나는 믿을 UPDATE FROM로모그래퍼 JOIN의지 도움말 :

MS SQL

UPDATE
    Sales_Import
SET
    Sales_Import.AccountNumber = RAN.AccountNumber
FROM
    Sales_Import SI
INNER JOIN
    RetrieveAccountNumber RAN
ON
    SI.LeadID = RAN.LeadID;

MySQL과 MariaDB

UPDATE
    Sales_Import SI,
    RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID;


답변

한 테이블에서 다른 테이블로 내용을 복사하는 간단한 방법은 다음과 같습니다.

UPDATE table2
SET table2.col1 = table1.col1,
table2.col2 = table1.col2,
...
FROM table1, table2
WHERE table1.memberid = table2.memberid

조건을 추가하여 특정 데이터를 복사 할 수도 있습니다.


답변

SQL Server 2008 + MERGE전용이 아닌 사용UPDATE ... FROM 구문 약간의 매력이 있습니다.

표준 SQL이면서 이식성이 높을뿐 아니라 최종 결과가 결정적이지 않고 소스 측에 여러 개의 조인 된 행 (따라서 업데이트에 사용할 수있는 여러 가지 다른 값)이있는 경우 오류가 발생합니다. .

MERGE INTO Sales_Import
   USING RetrieveAccountNumber
      ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
   UPDATE
      SET AccountNumber = RetrieveAccountNumber.AccountNumber;

불행히도 사용할 선택은 순전히 선호하는 스타일로 내려 가지 않을 수 있습니다. MERGESQL Server 의 구현에는 다양한 버그가 있습니다. Aaron Bertrand는 여기에보고 된 것들 의 목록을 편집했습니다 .


답변

미래 개발자를위한 일반적인 답변.

SQL 서버

UPDATE
     t1
SET
     t1.column = t2.column
FROM
     Table1 t1
     INNER JOIN Table2 t2
     ON t1.id = t2.id;

오라클 (및 SQL Server)

UPDATE
     t1
SET
     t1.colmun = t2.column
FROM
     Table1 t1,
     Table2 t2
WHERE
     t1.ID = t2.ID;

MySQL

UPDATE
     Table1 t1,
     Table2 t2
SET
     t1.column = t2.column
WHERE
     t1.ID = t2.ID;


답변

PostgreSQL의 경우 :

UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID; 


답변

MSSQL을 사용하고있는 것 같습니다. 정확히 기억하면 다음과 같이 수행됩니다.

UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] =
RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID


답변

에 일치하는 키가없는 행에 대해 foo.new설정된 것과 동일한 문제 가있었습니다 . Oracle에서 이와 같은 작업을 수행했습니다.nullfoobar

foo 업데이트
foo.new 설정 = (bar.new 선택)
                  바에서
                  여기서 foo.key = bar.key)
존재하는 곳 (1 번 선택)
              바에서
              여기서 foo.key = bar.key)