web-dev-qa-db-ja.com

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

私が選択したと言う

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-situation ;-)ありがとう!

76
acme

これと同じくらい簡単:

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;
143
krtek
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;
7
Ken
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

5
Jeff Fritz

[〜#〜] edit [〜#〜]-@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がある場合、これは機能しません

4
Sachin Shanbhag