[sql] ID 일치에 따라 한 테이블에서 다른 테이블로 SQL 업데이트
나는이있는 데이터베이스를 가지고 account numbers
와 card 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;
불행히도 사용할 선택은 순전히 선호하는 스타일로 내려 가지 않을 수 있습니다. MERGE
SQL 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에서 이와 같은 작업을 수행했습니다.null
foo
bar
foo 업데이트 foo.new 설정 = (bar.new 선택) 바에서 여기서 foo.key = bar.key) 존재하는 곳 (1 번 선택) 바에서 여기서 foo.key = bar.key)