MySQL:如何在 SQL 查询中为每个结果插入一条记录?
Posted
技术标签:
【中文标题】MySQL:如何在 SQL 查询中为每个结果插入一条记录?【英文标题】:MySQL: How to insert a record for each result in a SQL query? 【发布时间】:2011-07-11 23:26:51 【问题描述】:假设我有一个选择
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 每个人都需要一个好友来时不时地回答他们的问题。我奖励你的努力:[nerdmeritbadges.com/products/rubberduck] 我有同样的问题。例如,表的设计方式,我需要复制另一个用户条目,但有 356 条记录我需要复制给一个新用户。 【参考方案1】:执行这条 SQL 语句:
-- Do nothing.
您想从“config”中选择不同的行,并将这些相同的行插入到同一个表中。他们已经在里面了。无事可做。
除非您实际上只是想更新“域”列中的部分或全部值。这需要一个真正起作用的 UPDATE 语句。
【讨论】:
我的回答显然很幽默,并且 OP 承认要捂脸。我一点也不为此感到羞耻。【参考方案2】: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:你建议哪个答案?我看到其他 4 个答案,每个答案都在某种程度上是错误的。 哪里错了?至少我的第二个查询和 Jeff Fritz 的查询与您的结果相同。 Krtek:如果表有记录(1,1,"a","foo")和(1,1,"b","foo"),那么问题中的第一个查询返回 (1,1,"a"), (1,1,"b"),因此应将记录 (1,1,"example.com") 插入两次。您的答案与字符串文字“example.com”不同,因此 (1,1,"example.com") 仅插入一次。【参考方案3】:编辑-阅读对@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 - 如果你使用插入,它肯定会重复结果,如果你将你的 id 标记为主键,它甚至不会让你插入行。【参考方案4】: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】:就这么简单:
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;
【讨论】:
但这不会插入新记录,domain
设置为 'www.example.com',它只是复制所有条目。
你说得对 - 就这么简单 - 一个简单问题的简单解决方案 facepalm 谢谢 ;-)
我只是想写下复杂的连接来存档这个哈哈。非常感谢!再简单不过了。
您为我的编辑团队节省了几周无意识的模板更改 :-)
@ArtemAnkudovich 很高兴我能帮上忙 :)以上是关于MySQL:如何在 SQL 查询中为每个结果插入一条记录?的主要内容,如果未能解决你的问题,请参考以下文章