INSERT INTO ... SELECT,每个查询需要插入不超过一个元素

时间:2015-02-17 15:25:26

标签: mysql vb.net

我有2张桌子

zr1f4_k2_tags
id          int(11) AUTONUMERIC
name        varchar(255)  UNIQUE
published   smallint(6)

zr1f4_k2_tags_xref
id          int(11) AUTONUMERIC
tagID       int(11)
itemID      int(11)

我想填充zr1f4_k2_tags_xref

此查询执行我需要的操作

insert into zr1f4_k2_tags_xref (id, tagID, itemID) select NULL, id, @itemID from zr1f4_k2_tags where zr1f4_k2_tags.name=@tagName

但它有一个问题,在将项目添加到zr1f4_k2_tags_xref之后,它会复制条目,就像在zr1f4_k2_tags上多次查找tagmane一样,这是假的,因为它被声明为唯一。

我需要为每个查询添加一个reg到zr1f4_k2_tags_xref,它有时只用一个查询一遍又一遍地添加相同的东西。

第一个元素添加得很好。我不明白。

根据http://dev.mysql.com/doc/refman/5.0/en/insert-select.html,它说它会生成一个临时表,但我不知道它是如何工作的。

感谢您的时间!!

编辑:

我做另一个例子来帮助澄清我的问题,我的sql技能很差我总是继续做更多的查询效率非常低但现在我想提高我的sql技能而且我还需要这个特殊的速度项目

这个伪代码是我如何使用2个查询实现的。

从zr1f4_k2_tags中选择id,其中name =" foo"作为Tag_ID

请注意,插入内容上的Tag_ID来自第一个选择查询

INSERT INTO zr1f4_k2_tags_xref(tagID,itemID)VALUES(Tag_ID,@ MyItemID);

3 个答案:

答案 0 :(得分:1)

试试这个:

insert into zr1f4_k2_tags_xref (tagID, itemID) select id, @itemID from zr1f4_k2_tags where zr1f4_k2_tags.name=@tagName

答案 1 :(得分:0)

我想我理解这个问题 - 每次运行查询时都会插入所有值,而不仅仅是新值。

insert into zr1f4_k2_tags_xref (tagID, itemID) 
select id, @itemID 
from zr1f4_k2_tags 
where zr1f4_k2_tags.name=@tagName
and zr1f4_k2_tags.id not in (select id from zr1f4_k2_tags_xref)

如果不正确请解释原因

答案 2 :(得分:0)

对@Chris Dunaway来说,我解决了这个问题,不知怎样,我设置的独特字段在测试环境中并不是真正独一无二。