MySQL:SQLクエリの各結果のレコードを挿入する方法は?


84

私が選択したと言う

SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';

これはいくつかのレコードを返します。

結果セットのリーチ行を次のように挿入するにはどうすればよいですか?

INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');

結果セットの行のフィールドはどこに@idあり@customer_idますか?

編集:私はそれを単に複製したくなかったが、domain代わりにフィールドに新しい値を挿入した。それにもかかわらず、facepalm-それは非常に簡単なので状況;-)ありがとう!


選択したレコードを複製しますか?
ethrbunny 2011年

同じテーブルのレコードを同じテーブルに再度挿入するのはなぜですか?これにより重複が作成されます
Sachin Shanbhag 2011年

申し訳ありませんが、この質問はかなりばかげていました。私は非常に単純な問題のfacepalmで
acme

誰もが時々彼らの質問に答えるために仲間を必要としています。あなたの努力に対して私は授与します:[ nerdmeritbadges.com/products/rubberduck]
ジェフフリッツ

同じ問題があります。たとえば、テーブルの設計方法では、別のユーザーエントリを複製する必要がありますが、新しいユーザーに複製する必要があるレコードは356個あります。
ケーシー

回答:


160

これと同じくらい簡単です:

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, domain FROM config;

www.example.comドメインとして「」が必要な場合は、次のことができます。

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;

1
ただし、これはdomain「www.example.com」に設定された新しいレコードを挿入するのではなく、すべてのエントリを複製するだけです。
acme 2011年

あなたは正しいです-それはこれと同じくらい簡単です-単純な問題に対する簡単な解決策facepalmありがとう;
acme

このハァッをアーカイブするために、複雑な結合を書き留めるつもりでした。どうもありがとう!これ以上簡単なことはありません。
c4d 2016年

2
私の編集チームは、数週間の無意識のテンプレート変更を保存しました:-)
Artem Ankudovich 2016年

@ArtemAnkudovich私が助けてくれてうれしいです:)
krtek 2016年

7
INSERT INTO config (id, customer_id, domain)
SELECT id, customer_id, 'www.example.com' FROM (
  SELECT DISTINCT id, customer_id, domain FROM config
  WHERE type = 'foo'
) x;

1
このようなサブクエリを実行する必要はありません。他の回答を確認してください
krtek 2011年

Krtek:正確には、どの答えを提案していますか?私は他に4つの答えを見ましたが、それぞれが何らかの形で間違っています。
ケン

どのように間違っていますか?少なくとも私の2番目のクエリとJeffFritzからのクエリは、あなたのクエリと同じ結果になります。
krtek 2011年

1
Krtek:テーブルにレコード(1,1、 "a"、 "foo")と(1,1、 "b"、 "foo")がある場合、質問の最初のクエリは(1,1、 "a ")、(1,1、" b ")なので、求められたとおり、レコード(1,1、" example.com ")を2回挿入する必要があります。あなたの答えは文字列リテラル "example.com"で区別されるので、(1,1、 "example.com")は一度だけ挿入されます。
ケン

5
INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config

この構文のMySQLドキュメントは次のとおりです。

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html


ありがとう、しかし私は各フィールドを複製したくありませんでした、フィールド「ドメイン」は異なっているべきです。しかし、それでもそれは単純で、私はこの愚かな問題に悩まされていました。
acme

4

編集-@ Krtekの答えに対するコメントを読んだ後。

私はあなたが挿入の代わりに更新を求めていると思います-

update config set domain = 'www.example.com'

これにより、重複するエントリを作成することなく、ドメインが「www.example.com」である構成テーブル内の既存のすべてのレコードが更新されます。

古い答え-

あなたは次のようなものを使うことができます-

INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config

注:-主キーとしてIDがある場合、これは機能しません


ありがとう、しかし私は各フィールドを複製したくありませんでした、フィールド「ドメイン」は異なっているべきです。しかし、それでもそれは単純で、私はこの愚かな問題に悩まされていました。
acme 2011年

@ acme-挿入を使用すると、確実に結果が複製され、IDを主キーとしてマークした場合は、行を挿入することもできません。
Sachin Shanbhag 2011年

-6

次のSQLステートメントを実行します。

-- Do nothing.

「config」から個別の行を選択し、それらの同じ行を同じテーブルに挿入します。彼らはすでにそこにいます。何もすることはありません。

実際に「ドメイン」列の値の一部またはすべてを更新したい場合を除きます。それには、実際に何かを実行するUPDATEステートメントが必要になります。


3
私の答えは明らかにユーモラスであり、OPはfacepalmを認めています。少しでも恥ずかしくないです。
Mike Sherrill'Cat Recall '2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.