sqlite - 如何在SQLite中使用多个条件删除?

标签 sqlite

例如,我有下表:

create table t1(id1 int, id2 int, info text);
create table t2(id1 int, id2 int);

insert into t1 values(11, 12, "a");
insert into t1 values(11, 13, "b");
insert into t1 values(12, 13, "c");
insert into t1 values(13, 11, "d");
insert into t1 values(16, 17, "e");

insert into t2 values(11, 12);
insert into t2 values(15, 13);
insert into t2 values(12, 14);


我想从t1id1id2匹配的行中删除,除非我想保留t2id1匹配的行,或者如果两个都不匹配的行。

也就是说,我要删除第2行(因为在两个表中11都作为id2存在,第3行(因为在两个表中12都以id1存在),但不删除第1行(因为出现了元组(11,12))在两个表中),也不行4(因为id2中没有出现13,而在id1中的id2中没有出现11),也不行5。

在MySQL中,我认为可以使用子查询来做到这一点,但我认为SQLite不允许这样做。如何才能做到这一点?

最佳答案

SQLite允许子查询。尽管我对理解这个问题并不满意,但我怀疑这样的方法会起作用:

delete from t1 where exists
  (select * from t2 where (t2.id1 = t1.id1 or  t2.id2 = t1.id2)
                  and not (t2.id1 = t1.id1 and t2.id2 = t1.id2));

关于sqlite - 如何在SQLite中使用多个条件删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193223/

相关文章:

Linux 上的 Asp.net 核心 - dotnet ef 数据库更新失败并出现版本错误

c# - 使用 c# 在 winrt 中使用 SQLiteConnection 的问题?

python - 如何使用 SQLAlchemy 获取一条记录?

android - 在Android中使用Content Provider优于sqlite数据库有什么优势?

database - 在 VB6 中使用 SQLITE

android - SQLite 数据库或 XML string[] 哪个内存效率更高?

c# - UWP 使用 SQLite 创建数据库

iphone - 如何在我的 iPhone 上运行的应用程序中浏览核心数据?

c# - ORMLite 下的 SQLite 不允许在事务完成后执行任何操作

android - 我们如何知道我们的应用程序数据何时在 android 中被清除?