说我有一个选择
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 - 情况,因为它很容易;-)谢谢!
答案 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文档位于:
答案 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语句。