1. ホーム
  2. sql

[解決済み] Sql Server のサブクエリを使用したクエリの更新

2023-03-21 05:43:36

質問

私はこのような単純なテーブル構造を持っています。

テーブル tempData

╔══════════╦═══════╗
║   NAME   ║ MARKS ║
╠══════════╬═══════╣
║ Narendra ║    80 ║
║ Ravi     ║    85 ║
║ Sanjay   ║    90 ║
╚══════════╩═══════╝

また、別のテーブル名として tempDataView のようなものです。

╔══════════╦═══════╗
║   NAME   ║ MARKS ║
╠══════════╬═══════╣
║ Narendra ║       ║
║ Narendra ║       ║
║ Narendra ║       ║
║ Narendra ║       ║
║ Ravi     ║       ║
║ Ravi     ║       ║
║ Sanjay   ║       ║
╚══════════╩═══════╝

テーブルを更新したい tempDataView を設定することにより マーク に従って tempDataView - 名前 と比較して 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

実は、サブクエリを使って解くのが宿題のようなものです。

どのように解決するのですか?

であっても、両方のテーブルを結合することができます。 UPDATE ステートメントでも可能です。

UPDATE  a
SET     a.marks = b.marks
FROM    tempDataView a
        INNER JOIN tempData b
            ON a.Name = b.Name

より高速に動作させるためには INDEX をカラム上に定義します。 marks を追加してください。

を使って SUBQUERY

UPDATE  tempDataView 
SET     marks = 
        (
          SELECT marks 
          FROM tempData b 
          WHERE tempDataView.Name = b.Name
        )