[SQL] 는 SQL 서버에서 하위 쿼리를 사용하여 업데이트 쿼리
SQL는 SQL 서버에서 하위 쿼리를 사용하여 업데이트 쿼리
나는이 같은 간단한 테이블 구조를 가지고 :
테이블 tempData
╔══════════╦═══════╗
║ NAME ║ MARKS ║
╠══════════╬═══════╣
║ Narendra ║ 80 ║
║ Ravi ║ 85 ║
║ Sanjay ║ 90 ║
╚══════════╩═══════╝
그리고이 같은 tempDataView 같은 다른 테이블 이름이
╔══════════╦═══════╗
║ NAME ║ MARKS ║
╠══════════╬═══════╣
║ Narendra ║ ║
║ Narendra ║ ║
║ Narendra ║ ║
║ Narendra ║ ║
║ Ravi ║ ║
║ Ravi ║ ║
║ Sanjay ║ ║
╚══════════╩═══════╝
나는 tempData보기에 따라 마크를 설정하여, 테이블 tempData보기를 업데이트 할 - 이름 tempData와 비교 - 이름
예 제가 노력 무엇을 보여 드리죠,이는 완벽하게 해결 커서 등을 사용하여,하지만 난 하위 쿼리를 사용하여 해결하는 방법을 찾는하고 해결하기 위해 노력
여기있어:
Declare @name varchar(50),@marks varchar(50)
Declare @cursorInsert CURSOR
set @cursorInsert = CURSOR FOR
Select name,marks from tempData
OPEN @cursorInsert
FETCH NEXT FROM @cursorInsert
into @name,@marks
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE tempDataView set marks = @marks where name = @name
FETCH NEXT FROM @cursorInsert
INTO @name,@marks
END
CLOSE @cursorInsert
DEALLOCATE @cursorInsert
사실 그것은 나를 하위 쿼리를 사용하여 해결하기위한 숙제 같아요.
해결법
-
==============================
1.당신은 심지어 UPDATE 문에 두 테이블에 가입 할 수 있습니다
당신은 심지어 UPDATE 문에 두 테이블에 가입 할 수 있습니다
UPDATE a SET a.marks = b.marks FROM tempDataView a INNER JOIN tempData b ON a.Name = b.Name
빠른 성능을 위해 두 테이블에 열 표시에 INDEX를 정의합니다.
하위 쿼리를 사용하여
UPDATE tempDataView SET marks = ( SELECT marks FROM tempData b WHERE tempDataView.Name = b.Name )
-
==============================
2.당신은 그냥 배우는 때문에 나는 당신이 SELECT는 UPDATE에 조인 또는 DELETE 조인 변환 연습을 제안한다. 우선은이 두 테이블을 조인 SELECT 문을 생성 제안 :
당신은 그냥 배우는 때문에 나는 당신이 SELECT는 UPDATE에 조인 또는 DELETE 조인 변환 연습을 제안한다. 우선은이 두 테이블을 조인 SELECT 문을 생성 제안 :
SELECT * FROM tempDataView a INNER JOIN tempData b ON a.Name = b.Name
그런 다음 우리는 두 개의 테이블 별칭 a와 b가 있습니다. 쉽게 UPDATE 문을 생성 할 수 있습니다 이러한 별칭을 사용하거나 테이블 A 또는 B를 업데이트합니다. 테이블 A에 대해 당신은 JW가 제공하는 답을 가지고있다. 당신이 B를 업데이트 할 경우, 문이 될 것입니다 :
UPDATE b SET b.marks = a.marks FROM tempDataView a INNER JOIN tempData b ON a.Name = b.Name
이제 같은 방법 DELETE 문을 사용하여 문을 변환합니다. 문은 아래 만 기록을 위해 (그대로 b를 떠나)에서 삭제됩니다 해당 이름의 일치 :
DELETE a FROM tempDataView a INNER JOIN tempData b ON a.Name = b.Name
당신은 놀이터로 JW에 의해 생성 된 SQL 바이올린을 사용할 수 있습니다
-
==============================
3.이 스레드의 제목은 하위 쿼리가 업데이트에 사용할 수있는 방법을 묻습니다. 다음은 그 예입니다 :
이 스레드의 제목은 하위 쿼리가 업데이트에 사용할 수있는 방법을 묻습니다. 다음은 그 예입니다 :
update [dbName].[dbo].[MyTable] set MyColumn = 1 where ( select count(*) from [dbName].[dbo].[MyTable] mt2 where mt2.ID > [dbName].[dbo].[MyTable].ID and mt2.Category = [dbName].[dbo].[MyTable].Category ) > 0
-
==============================
4.몇 가지 예를 들면 다음과 업데이트 작업의 좋은 설명입니다. 이 포스트 그레스 사이트이지만, 비록 SQL 쿼리도 다른 DB에 유효합니다. 다음 예는 이해하기 직관적이다.
몇 가지 예를 들면 다음과 업데이트 작업의 좋은 설명입니다. 이 포스트 그레스 사이트이지만, 비록 SQL 쿼리도 다른 DB에 유효합니다. 다음 예는 이해하기 직관적이다.
-- Update contact names in an accounts table to match the currently assigned salesmen: UPDATE accounts SET (contact_first_name, contact_last_name) = (SELECT first_name, last_name FROM salesmen WHERE salesmen.id = accounts.sales_id); -- A similar result could be accomplished with a join: UPDATE accounts SET contact_first_name = first_name, contact_last_name = last_name FROM salesmen WHERE salesmen.id = accounts.sales_id;
salesmen.id가 고유 키가 아닌 경우 첫 번째 쿼리가 여러 ID 일치가있는 경우 오류가 발생 보장하는 반면, 두 번째 질의는 예기치 않은 결과가 나타날 수 있습니다. 일치하는 특정 accounts.sales_id 항목에 대해이없는 경우 두 번째 쿼리 모두에서 해당 행을 업데이트하지 않습니다 반면 또한, 첫 번째 쿼리는 NULL에 해당하는 이름 필드를 설정합니다.
따라서 주어진 예를 들어, 가장 신뢰할 수있는 쿼리는 다음과 같다.
UPDATE tempDataView SET (marks) = (SELECT marks FROM tempData WHERE tempDataView.Name = tempData.Name);
-
==============================
5.내가 업데이트 및 subquerys과 같은 문제가 있었기 때문에 여기 내 예제에서 나는, 이것의 해결책을 찾을 수 있습니다 :
내가 업데이트 및 subquerys과 같은 문제가 있었기 때문에 여기 내 예제에서 나는, 이것의 해결책을 찾을 수 있습니다 :
UPDATE A SET A.ValueToChange = B.NewValue FROM ( Select * From C ) B Where A.Id = B.Id
from https://stackoverflow.com/questions/14618703/update-query-using-subquery-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL을 누적 총 개수 (0) | 2020.06.01 |
---|---|
[SQL] 하나의 SQL 서버에서 다른 서버로 내보내기 테이블 데이터 (0) | 2020.05.31 |
[SQL] SQL Server 2008의 데이터베이스로부터 데이터를 백업 하나의 테이블 (0) | 2020.05.31 |
[SQL] 특정 값으로 VARCHAR () 열 제한? (0) | 2020.05.31 |
[SQL] 어떻게 hstore 확장자를 가진 새 데이터베이스가 이미 설치를 만드는 방법? (0) | 2020.05.31 |