Hey Stackoverflow社区!
我目前使用临时表来存储数组列表,比较表中不存在哪些数组并插入那些但我希望有更快更优化的方法。
我的目标是将其归结为一个查询
1。)我有一个c_no INT数组(1,2,3,4,5)我想添加到group_join表。
2.。)在groups_join中,我需要预先形成以下查询以获取当前表中的所有c_no值。
select c_no from groups_join where g_no = (INT)
查看群组中的INT是什么
3。)我需要检查我将要插入的任何c_no INT是否已经在group_join表中与g_no相同,所以我没有重复项。
答案 0 :(得分:3)
我猜您正在寻找IN
关键字。
SELECT * FROM myTable WHERE field IN (myList)
如果您希望g_no字段具有唯一值,为什么不添加unique
索引? MySQL Document - Create Index
答案 1 :(得分:1)
要插入groups_join
表中尚不存在的数组值,您需要使用NOT EXISTS
这样的内容:
INSERT INTO groups_join(c_no)
SELECT c_no
FROM yourTempTable yt
WHERE NOT EXISTS (
SELECT 1
FROM groups_join gj
WHERE yt.c_no = gj.c_no
);
答案 2 :(得分:1)
由于代表我无法发表评论,但是在回答您对Didier的回答的评论时,您可以在INSERT
之后使用INSERT IGNORE
来创建您的{{1} }}。当您使用unique index
时,MySQL不会插入该值,但也会抑制因尝试插入重复的INSERT IGNORE
而引发的错误。这将允许您添加唯一索引,而无需编写代码来处理错误。
unique index