我有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);
答案 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)