[SQL] ID 일치를 기반으로 한 테이블에서 다른 SQL 업데이트
SQLID 일치를 기반으로 한 테이블에서 다른 SQL 업데이트
나는 계좌 번호와 카드 번호 데이터베이스를 가지고있다. 나는 단지 계좌 번호와 함께 일하고 그래서, 계좌 번호에 어떤 카드 번호를 업데이트 할 파일이 일치합니다.
나는 테이블 ID 및 관련 계좌 번호를 반환하는 계정 / 카드 데이터베이스에 테이블을 연결하는 뷰를 생성하고, 지금은 그 기록을 갱신 할 필요가 어디 계좌 번호와 ID가 일치.
이 계정 번호 필드를 업데이트 할 필요가 Sales_Import 테이블입니다 :
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로 대체됩니다
해결법
-
==============================
1.나는와에서 업데이트는 의지의 도움을 가입 믿는다
나는와에서 업데이트는 의지의 도움을 가입 믿는다
UPDATE Sales_Import SET Sales_Import.AccountNumber = RAN.AccountNumber FROM Sales_Import SI INNER JOIN RetrieveAccountNumber RAN ON SI.LeadID = RAN.LeadID;
UPDATE Sales_Import SI, RetrieveAccountNumber RAN SET SI.AccountNumber = RAN.AccountNumber WHERE SI.LeadID = RAN.LeadID;
-
==============================
2.다른 하나 개의 테이블에서 콘텐츠를 복사 할 수있는 간단한 방법은 다음과 같다 :
다른 하나 개의 테이블에서 콘텐츠를 복사 할 수있는 간단한 방법은 다음과 같다 :
UPDATE table2 SET table2.col1 = table1.col1, table2.col2 = table1.col2, ... FROM table1, table2 WHERE table1.memberid = table2.memberid
또한 복사 된 특정 데이터를 얻을 수있는 조건을 추가 할 수 있습니다.
-
==============================
3.구문은 어떤 매력을 가지고 FROM SQL 서버 2008 +의 경우 ... MERGE보다는 독점 UPDATE를 사용.
구문은 어떤 매력을 가지고 FROM SQL 서버 2008 +의 경우 ... MERGE보다는 독점 UPDATE를 사용.
인 다중 오히려 결정적 (undeterministic) 될 최종 결과를 갖는 것보다 (업데이트에서 사용하기 때문에 다수의 가능한 다른 값)의 소스 측의 행 합류 아니라 표준 SQL있어 이식성되는대로도의 경우에 오류를 발생 하겠지만 .
MERGE INTO Sales_Import USING RetrieveAccountNumber ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID WHEN MATCHED THEN UPDATE SET AccountNumber = RetrieveAccountNumber.AccountNumber;
불행하게도 선택은 어느 사용하지만 선호하는 스타일에 순수하게 내려 오지 않을 수 있습니다. SQL Server의 MERGE의 구현은 다양한 버그와 고통되었습니다. 아론 버트 랜드는 여기에보고 된 것들의 목록을 컴파일하고있다.
-
==============================
4.미래의 개발자를위한 일반 대답.
미래의 개발자를위한 일반 대답.
UPDATE t1 SET t1.column = t2.column FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id;
UPDATE t1 SET t1.colmun = t2.column FROM Table1 t1, Table2 t2 WHERE t1.ID = t2.ID;
UPDATE Table1 t1, Table2 t2 SET t1.column = t2.column WHERE t1.ID = t2.ID;
-
==============================
5.PostgreSQL의 경우 :
PostgreSQL의 경우 :
UPDATE Sales_Import SI SET AccountNumber = RAN.AccountNumber FROM RetrieveAccountNumber RAN WHERE RAN.LeadID = SI.LeadID;
-
==============================
6.내가 제대로, 그것은 다음과 같이 이루어집니다 기억한다면 당신은, 다음, MSSQL을 사용하는 것 같습니다 :
내가 제대로, 그것은 다음과 같이 이루어집니다 기억한다면 당신은, 다음, MSSQL을 사용하는 것 같습니다 :
UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] = RetrieveAccountNumber.AccountNumber FROM RetrieveAccountNumber WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID
-
==============================
7.나는 줄에 일치하는 키가 없었 foo는 행에 null로 foo.new 존재 세트와 같은 문제가 있었다. 나는 오라클이 뭔가를했다 :
나는 줄에 일치하는 키가 없었 foo는 행에 null로 foo.new 존재 세트와 같은 문제가 있었다. 나는 오라클이 뭔가를했다 :
update foo set foo.new = (select bar.new from bar where foo.key = bar.key) where exists (select 1 from bar where foo.key = bar.key)
-
==============================
8.MySQL을위한 그 잘 작동합니다 :
MySQL을위한 그 잘 작동합니다 :
UPDATE Sales_Import SI,RetrieveAccountNumber RAN SET SI.AccountNumber = RAN.AccountNumber WHERE SI.LeadID = RAN.LeadID
-
==============================
9.여기에 SQL 서버에서 나를 위해 일한 내용은 다음과 같습니다
여기에 SQL 서버에서 나를 위해 일한 내용은 다음과 같습니다
UPDATE [AspNetUsers] SET [AspNetUsers].[OrganizationId] = [UserProfile].[OrganizationId], [AspNetUsers].[Name] = [UserProfile].[Name] FROM [AspNetUsers], [UserProfile] WHERE [AspNetUsers].[Id] = [UserProfile].[Id];
-
==============================
10.응답 주셔서 감사합니다. 나는 상점 해결책을 발견했다.
응답 주셔서 감사합니다. 나는 상점 해결책을 발견했다.
UPDATE Sales_Import SET AccountNumber = (SELECT RetrieveAccountNumber.AccountNumber FROM RetrieveAccountNumber WHERE Sales_Import.leadid =RetrieveAccountNumber.LeadID) WHERE Sales_Import.leadid = (SELECT RetrieveAccountNumber.LeadID FROM RetrieveAccountNumber WHERE Sales_Import.leadid = RetrieveAccountNumber.LeadID)
-
==============================
11.경우에 테이블이 다른 데이터베이스에 있습니다. (SQLSERVER)
경우에 테이블이 다른 데이터베이스에 있습니다. (SQLSERVER)
update database1..Ciudad set CiudadDistrito=c2.CiudadDistrito FROM database1..Ciudad c1 inner join database2..Ciudad c2 on c2.CiudadID=c1.CiudadID
-
==============================
12.ID에 따라 표 2와 표를 업데이트 쿼리의 다음 블록을 사용합니다 :
ID에 따라 표 2와 표를 업데이트 쿼리의 다음 블록을 사용합니다 :
UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
이것은이 문제를 해결하는 가장 쉬운 방법입니다.
-
==============================
13.MS SQL
MS SQL
UPDATE c4 SET Price=cp.Price*p.FactorRate FROM TableNamea_A c4 inner join TableNamea_B p on c4.Calcid=p.calcid inner join TableNamea_A cp on c4.Calcid=cp.calcid WHERE c4..Name='MyName';
오라클 11g
MERGE INTO TableNamea_A u using ( SELECT c4.TableName_A_ID,(cp.Price*p.FactorRate) as CalcTot FROM TableNamea_A c4 inner join TableNamea_B p on c4.Calcid=p.calcid inner join TableNamea_A cp on c4.Calcid=cp.calcid WHERE p.Name='MyName' ) rt on (u.TableNamea_A_ID=rt.TableNamea_B_ID) WHEN MATCHED THEN Update set Price=CalcTot ;
-
==============================
14.같은 테이블에서 업데이트 :
같은 테이블에서 업데이트 :
DECLARE @TB1 TABLE ( No Int ,Name NVarchar(50) ,linkNo int ) DECLARE @TB2 TABLE ( No Int ,Name NVarchar(50) ,linkNo int ) INSERT INTO @TB1 VALUES(1,'changed person data', 0); INSERT INTO @TB1 VALUES(2,'old linked data of person', 1); INSERT INTO @TB2 SELECT * FROM @TB1 WHERE linkNo = 0 SELECT * FROM @TB1 SELECT * FROM @TB2 UPDATE @TB1 SET Name = T2.Name FROM @TB1 T1 INNER JOIN @TB2 T2 ON T2.No = T1.linkNo SELECT * FROM @TB1
-
==============================
15.는 SQL 아래 사람이 SQL 서버에서 작동하지 않음, 제안했다. 이 구문은 나의 오래된 학교 수업을 생각 나게 :
는 SQL 아래 사람이 SQL 서버에서 작동하지 않음, 제안했다. 이 구문은 나의 오래된 학교 수업을 생각 나게 :
UPDATE table2 SET table2.col1 = table1.col1, table2.col2 = table1.col2, ... FROM table1, table2 WHERE table1.memberid = table2.memberid
NOT IN 또는 NOT 사용하는 다른 모든 쿼리는 사용하지 않는 것이 좋습니다 존재한다. 영업 이익은 물론 문제가 일치됩니다의 다음 작은 부분 집합 전체 데이터 집합을 비교하기 때문에 널 (NULL)이 표시됩니다. 이것은 올바른가 NOT IN을 사용하여 닷징 문제 대신 가입으로 적절한 SQL을 작성하여 고정해야합니다. 당신은 NOT IN을 사용하여 다른 문제로 실행 또는 NOT이 경우에 존재 수 있습니다.
SQL 서버에 가입하여 다른 테이블을 기반으로 테이블을 업데이트하는 기존의 방법입니다 상단의 하나에 대한 나의 투표. 내가 말했듯이 먼저 그들과 합류하지 않는 한, 당신은 SQL 서버에서 동일한 UPDATE 문에서 두 테이블을 사용할 수 없습니다.
-
==============================
16.그것은 PostgreSQL을 함께 작동
그것은 PostgreSQL을 함께 작동
UPDATE application SET omts_received_date = ( SELECT date_created FROM application_history WHERE application.id = application_history.application_id AND application_history.application_status_id = 8 );
-
==============================
17.나는이 간단한 예를 들어 힘의 사람이 쉽게 그것을 얻을 것입니다 생각
나는이 간단한 예를 들어 힘의 사람이 쉽게 그것을 얻을 것입니다 생각
DECLARE @TB1 TABLE ( No Int ,Name NVarchar(50) ) DECLARE @TB2 TABLE ( No Int ,Name NVarchar(50) ) INSERT INTO @TB1 VALUES(1,'asdf'); INSERT INTO @TB1 VALUES(2,'awerq'); INSERT INTO @TB2 VALUES(1,';oiup'); INSERT INTO @TB2 VALUES(2,'lkjhj'); SELECT * FROM @TB1 UPDATE @TB1 SET Name =S.Name FROM @TB1 T INNER JOIN @TB2 S ON S.No = T.No SELECT * FROM @TB1
-
==============================
18.오라클 11g
오라클 11g
merge into Sales_Import using RetrieveAccountNumber on (Sales_Import.LeadId = RetrieveAccountNumber.LeadId) when matched then update set Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber;
-
==============================
19.이것은 당신이 다른 테이블에서 발견되지 않는 열 값을 기준으로 테이블을 업데이트 할 수 있습니다.
이것은 당신이 다른 테이블에서 발견되지 않는 열 값을 기준으로 테이블을 업데이트 할 수 있습니다.
UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN ( SELECT * FROM ( SELECT table1.id FROM table1 LEFT JOIN table2 ON ( table2.column = table1.column ) WHERE table1.column = 'some_expected_val' AND table12.column IS NULL ) AS Xalias )
이 컬럼 값을 기준으로 테이블이 두 테이블에서 발견되고 업데이트됩니다.
UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN ( SELECT * FROM ( SELECT table1.id FROM table1 JOIN table2 ON ( table2.column = table1.column ) WHERE table1.column = 'some_expected_val' ) AS Xalias )
-
==============================
20.이 시도 :
이 시도 :
UPDATE Table_A SET Table_A.AccountNumber = Table_B.AccountNumber , FROM dbo.Sales_Import AS Table_A INNER JOIN dbo.RetrieveAccountNumber AS Table_B ON Table_A.LeadID = Table_B.LeadID WHERE Table_A.LeadID = Table_B.LeadID
-
==============================
21.나는 1 개의 여분의 일을 추가하고 싶습니다.
나는 1 개의 여분의 일을 추가하고 싶습니다.
동일 값의 값을 갱신하지 않는, 그것은 추가 기록 불필요한 오버 헤드를 발생한다. 아래의 예를 참조하십시오 - 그것은 단지 3에 연결에도 불구하고이 개 기록에 업데이트를 수행합니다.
DROP TABLE #TMP1 DROP TABLE #TMP2 CREATE TABLE #TMP1(LeadID Int,AccountNumber NVarchar(50)) CREATE TABLE #TMP2(LeadID Int,AccountNumber NVarchar(50)) INSERT INTO #TMP1 VALUES (147,'5807811235') ,(150,'5807811326') ,(185,'7006100100007267039'); INSERT INTO #TMP2 VALUES (147,'7006100100007266957') ,(150,'7006100100007267039') ,(185,'7006100100007267039'); UPDATE A SET A.AccountNumber = B.AccountNumber FROM #TMP1 A INNER JOIN #TMP2 B ON A.LeadID = B.LeadID WHERE A.AccountNumber <> B.AccountNumber --DON'T OVERWRITE A VALUE WITH THE SAME VALUE SELECT * FROM #TMP1
-
==============================
22.이 시도를 위해 위의 답변이 작동하지 않는 경우
이 시도를 위해 위의 답변이 작동하지 않는 경우
Update Sales_Import A left join RetrieveAccountNumber B on A.LeadID = B.LeadID Set A.AccountNumber = B.AccountNumber where A.LeadID = B.LeadID
from https://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 TABLEA FROM [COLUMNA 제외] SELECT *를 이용하여 열을 제외? (0) | 2020.03.08 |
---|---|
[SQL] SQL 서버에서 날짜의 제거 시간 부분에 가장 좋은 방법 (0) | 2020.03.08 |
[SQL] 오라클에서 여러 행으로 분할 문자열 (0) | 2020.03.08 |
[SQL] SQL Server에서 INSERT 또는 UPDATE를위한 솔루션 (0) | 2020.03.08 |
[SQL] 어떻게 SQL 주입에 대한 매개 변수화 된 쿼리 도움을? (0) | 2020.03.07 |