MySQL:如何在SQL查询中为每个结果插入记录?

时间:2011-03-09 14:52:36

标签: mysql sql loops insert

说我有一个选择

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 - 情况,因为它很容易;-)谢谢!

5 个答案:

答案 0 :(得分:138)

这很简单:

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 :(得分: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;

答案 2 :(得分: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

答案 3 :(得分:3)

编辑 - 阅读有关@ Krtek答案的评论。

我猜你要求更新而不是插入 -

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

这将更新配置表中的所有现有记录,域名为“www.example.com”,而不会创建任何重复的条目。

OLD ANSWER -

你可以使用像 -

这样的东西
INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config

注意: - 如果您将ID作为主键

,则无效

答案 4 :(得分:-6)

执行此SQL语句:

-- Do nothing.

您希望从“config”中选择不同的行,并将这些相同的行插入到同一个表中。他们已经在那里了。无所事事。

除非您实际上只想更新“域”列中的部分或全部值。这需要一个真正做某事的UPDATE语句。