gpt4 book ai didi

android - Sqlite 组合键不在

转载 作者:行者123 更新时间:2023-11-30 01:19:53 25 4
gpt4 key购买 nike

我有一个链接表 event_user,它有一个基于 user_id 和 event_id 的复合键。

我在 Java 中有一个 (user_id, event_id) 对数组,我想确保表中不存在数组中不存在的任何其他 (user_id, event_id) 对。

在其他表中,我只是创建了一串id,然后我创建了以下查询

DELETE FROM tablename WHERE column NOT IN ( 1 , 2 , ... n)

但是,这种带有 NOT IN 的行为无法通过多列实现。如何有效地使用 Java 和 sqlite 实现?

提前致谢。

最佳答案

在 SQLite 中,IN 仅适用于单个列。所以你必须明确地写出所有比较:

DELETE FROM TableName
WHERE (Col1 != 1 OR Col2 != 10)
AND (Col1 != 2 OR Col2 != 20)
AND ...;

SQLite 可以为大型 IN 列表建立索引,但对于像这样的大型表达式则不会这样做。因此,如果查询变得太大,您可以将 ID 放入一个临时表中,并使用子查询来检查匹配的行:

DELETE FROM TableName
WHERE NOT EXISTS (SELECT 1
FROM IDsToKeep
WHERE IDsToKeep.Col1 = TableName.Col1
AND IDsToKeep.Col2 = TableName.Col2);

为了提高效率,应该对临时表进行索引(或者只是一个 WITHOUT ROWID table,两列都有主键)。

关于android - Sqlite 组合键不在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37263886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com