在相同的表名中,使用选择查询语句插入查询。

5
有没有可能在“插入”查询中使用“选择”查询,但条件是我想同时使用相同的表名来进行“选择”和“插入”查询。
例如:
mysql> insert into sample_elements (name,position,ownerel) values ('Namespace1', select id from sample_elements where name='Namespace1',0);

请指导我。
5个回答

16

将您的插入语句更改为以下格式:

insert into sample_elements (name,position,ownerel) select 'Namespace1',id,0 from sample_elements where name='Namespace1';

基本上不是使用值,而是使用select语句,并将硬编码的值作为列插入


2

我认为您能做到。您可以使用以下方法:

INSERT INTO table (..fields) SELECT ..fields.. FROM table;

0
我不知道MySQL,但你可以尝试以下方法吗?
insert into sample_elements select name, id, 0 from sample_elements where name='Namespace1'

0

我不确定。我认为这个插入语句是用于查找已经存在的内容还是其他目的。

谢谢。


-1

这里有另一种可行的格式,使用“SET”结构。对于大多数SQL,我更喜欢这种格式,因为字段名与值配对 - 这比完全依赖位置的字段/值列表更容易维护。

INSERT INTO sample_elements SET
name = 'Namespace1',
position = (SELECT id FROM sample_elements WHERE name='Namespace1'),
ownere1 = 0;

-1 这个解决方案不适用于明显正在使用MySQL的OP。请参考这个答案:https://dev59.com/7m855IYBdhLWcg3wSiM7#14302701 - fgblomqvist
它在我的SQL上是可以工作的,那就是我使用它的地方。请澄清它在哪里/如何不起作用,因为我认为你会发现问题出在你的实现/版本/驱动程序上,而不是mySQL上。问候 - Andy Lorenz
我已经指定了,请查看我提供的答案。请至少说明您尝试过的MySQL数据库版本。 - fgblomqvist
你链接的答案与我的回答和原帖不是同一种情况。你所提供的链接与此问题无关。我只是指出有一种不同的语法可以让你将字段与值配对。但既然你要求证据,请参见http://dev.mysql.com/doc/refman/5.5/en/insert.html - 或者5.6、5.7。 "SET"是语法中一个明确定义的部分。 - Andy Lorenz
抱歉,您似乎不明白您的答案有什么问题。在查询表x时,在子查询中引用表x,需要一些技巧(如我链接的答案所解释的)。我的评分将保持为-1,我将让第三方决定您是否正确,如果这样的人出现的话。 - fgblomqvist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接