ある列から別の列(別のテーブルにある)にデータをコピーします


89

ある列から別のテーブルの別の列にデータをコピーしたい。どうやってやるの?

私は以下を試しました:

Update tblindiantime Set CountryName =(Select contacts.BusinessCountry From contacts) 

しかし、それは機能しませんでした。

連絡先テーブルの「BusinessCountry」列をtblindiantimeテーブルの「CountryName」列にコピーしたい。


1
あるテーブルから別のテーブルに列をコピーするには、テーブル間に何らかの関係が必要です。2つのテーブルに共通のIDがありますか?
mdma 2010

1
どのデータベースとバージョンを使用していますか?
マークバイアーズ2010

回答:


89

SQL Server 2008では、次のようにマルチテーブル更新を使用できます。

UPDATE tblindiantime 
SET tblindiantime.CountryName = contacts.BusinessCountry
FROM tblindiantime 
JOIN contacts
ON -- join condition here

更新する行を指定するには、結合条件が必要です。

ターゲットテーブルが現在空の場合は、代わりにINSERTを使用する必要があります。

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
こんにちは、担当者に感謝しますが、次のエラーが表示されます。値NULLを列 'IndianTime'、テーブル 'tqms.dbo.tblindiantime'に挿入できません。列はnullを許可しません。INSERTが失敗します。ステートメントは終了されました。
Amit Patil 2010

2
@ AmitPatil-これは古いことは知っていますが、あなたのような人を助けるかもしれません。単なるcontacts.BusinessCountryの代わりにISNULL(contacts.BusinessCountry、 '')を使用すると、問題が解決するはずです。基本的に、nullを空の文字列に置き換えています。
ankur-m 2012

1
この例では「結合条件」が何であるかを示していないため、Michael Pakhantsovの回答、cedrikdlbの回答、および同様の質問に対するParveenの回答も参照してください。正しい行を選択するには、2つの列を比較する必要があります
toolmakerSteve 2016

152

ここでクエリ:

同じ表:

UPDATE table_name 
SET column1 = column2

別の表:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );

13
askerが具体的に2つのテーブルを含む質問のコンテキストでは間違っています。
bPratik 2013

2
列の場合のmysqlでの動作は、同じテーブルに関連しています。
Satish Pandey 2013

11
しかし、これは私の問題を解決し、質問の詳細よりもおそらくこの回答に一致する質問のタイトルからここに到達しました!
ロブ・グラント

6
この回答は、質問自体ではなく、質問のタイトルに答えます。それでも、これは私がやろうとしていたことに役立つことがわかりました。
Wizard07KSU 2015年

1
これは優れた答えです。バックアップからメインテーブルに1つの列だけをコピーするのに役立ちました!
Zelter Ady

22

Table2.Column2 => Table1.Column1

この質問は古いと思いますが、受け入れられた答えは私にはうまくいきませんでした。将来のグーグルにとって、これは私のために働いたものです:

UPDATE table1 
    SET column1 = (
        SELECT column2
        FROM table2
        WHERE table2.id = table1.id
    );

それによって:

  • table1 =更新する必要のある列があるテーブル
  • table2 =データを含む列があるテーブル
  • column1 = column2からのデータを必要とする空白の列(これはtable1にあります)
  • column2 =データを含む列(つまり、table2にあります)

1
私のために働いた-しかしすることにより、上記の答えと同じです[Michael Pakhantsov]
ドン・チードル

3
あなたは正しいです、@ mmcra、それは今上記の答えと同じです。しかし、私がこのコメントを書いたときと同じではありませんでした。9月に編集され、エラーが修正されたことがわかります。私は6月にこのコメントを書きました。
ケニーグレイジ2016年

16

キーフィールドが2つのテーブルであることを願っています。

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )

1
これは、1つのフィールドを他の1つのフィールドに置き換える場合にのみ有効です。ORA-01427: single-row subquery returns more than one row選択によって複数の行が返される場合にスローされます。複数の行を選択して、これらの値で列を更新する場合はどうなりますか?
ムハンマドラマヒ2013年

3
@Muhammad Ramahy、更新列にネストされたテーブルがありますか?サブクエリで複数の行が返される場合、Keyは連絡先テーブルのPrimaryKeyではありません。複合主キーがある場合は、WHERE句の条件が必要です。
Michael Pakhantsov 2013年

1
「キーフィールドが2つのテーブルであることを願っています」とはどういう意味かわかりません
Marco Lackovic 2016

2
@ Krige-彼は明らかに「2つのテーブルに共有キーフィールドがあり、各テーブルのどの行が他のテーブルの行と一致するかを識別する」ことを意味します。そうでない場合は、後の内容を変更する必要がありますWHERE。たとえば、tblindiantimeにフィールドがありますContactID。これはtblindiantimeIDの各行にcontacts属する行のフィールドであり、を使用しますWHERE tblindiantime.ContactID=contacts.ID。別のバリエーションについては、cedrikdlbの回答を参照してください。
toolmakerSteve 2016

8

同様の質問の回答は、この質問で選択された回答(Mark Byersによる)よりも正確に機能しました。Markの回答を使用して、更新された列はすべての行で同じ値を取得しました(おそらく、結合に一致した最初の行の値)。他のスレッドからのParveenaAroraの回答を使用して、列を正しい値で更新しました。

この質問のテーブル名と列名を使用するようにParveenaのソリューションを変換すると、クエリは次のようになります(テーブルはtblindiantime.contact_idを介して関連付けられていると想定しています)。

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;

3

以前の回答はすべて正しいと思います。以下のコードは、複数の行を一度に更新する必要がある場合に特に有効です。注:これはPL / SQLです。

DECLARE
    CURSOR myCursor IS 
      Select contacts.BusinessCountry 
      From contacts c WHERE c.Key = t.Key;
    ---------------------------------------------------------------------
BEGIN
    FOR resultValue IN myCursor LOOP
        Update tblindiantime t
        Set CountryName=resultValue.BusinessCountry 
        where t.key=resultValue.key;
    END LOOP;
END;

これがお役に立てば幸いです。


2

現在、Management Studio2016を使用するとさらに簡単になります。

SQL Server ManagementStudioの使用

あるテーブルから別のテーブルにデータをコピーするには

1.テーブルを右クリックし、[デザイン]をクリックして、コピーする列とコピー先の列を含むテーブルを開きます。

2.コピーする列のあるテーブルのタブをクリックして、それらの列を選択します。

3. [編集]メニューから、[コピー]をクリックします。

4.新しいクエリエディタウィンドウを開きます。

5.クエリエディタを右クリックし、エディタで[クエリのデザイン]をクリックします。

6. [テーブル追加]ダイアログボックスで、ソーステーブルと宛先テーブルを選択し、[追加]クリックして、[テーブルの追加]ダイアログボックスを閉じます。

7.クエリエディタの開いている領域を右クリックし、[タイプの変更]をポイントして、[結果の挿入]をクリックします。

8. [挿入結果のターゲットテーブル選択]ダイアログボックスで、宛先テーブルを選択します。

9.クエリデザイナの上部で、ソーステーブルのソース列をクリックします。

10.クエリデザイナがINSERTクエリを作成しました。[OK]をクリックして、クエリを元のクエリエディタウィンドウに配置します。

11.クエリを実行して、ソーステーブルから宛先テーブルにデータを挿入します。

詳細情報https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

別の属性を使用することで解決できます。

  • セルControlクリックイベントを使用します。
  • 葯の列に転置する列の値を選択します。
  • 選択した値を別のテキストボックスまたはレベルに送信し、選択したプロパティを変更するための便利なボタンを入力します。
  • データベースのスタック全体を更新し、SQLクエリを使用してアルゴリズムを作成して、これを克服し、別の列に転置します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.