MySQL:如何插入SQL查询中的每个结果的logging?

说我有一个select

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

它返回一些logging。

如何在结果集中执行插入行

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

其中@id@customer_id是结果集中行的字段?

编辑:我不想只复制它,而是插入一个新的值,而不是domain字段。 尽pipe如此,一个facepalm的情况是很简单的;-)谢谢!

像这样简单:

 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; 
 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

 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; 

编辑 – 阅读@ Krtek的回答评论。

我想你是要求更新而不是插入 –

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

这将更新configuration表中的所有现有logging为“www.example.com”,而不会创build任何重复条目。

老解答

你可以使用像 –

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

注意: – 如果你有id作为主键,这将不起作用

执行这个SQL语句:

 -- Do nothing. 

你想从“configuration”中select不同的行,并将同样的行插入到同一个表中。 他们已经在那里了。 没事做。

除非实际上只想更新“域”列中的部分或全部值。 这将需要一个确实做了什么的UPDATE语句。