我在Android中使用SQLite db工作,并且卡在进行特定的查询:

我有一个带有一些电子邮件ID的表1,还有一个带有电子邮件ID和对应于这些ID的用户名的表2。从表2中,我只需要发送表1中不存在的那些emailid /用户名。我想在android中使用Cursor做到这一点,例如:

Cursor cursor = getReadableDatabase().query(
                MY_TABLE,
                new String[] {ID},
                EMAIL_ID +" = ?",
                new String[]{email_id},
                null,
                null,
                null);


前提条件是:

我不想使用表2中的delete

我不想在表2中创建额外的列。

最佳答案

NOT IN与子选择一起使用以过滤查询中的结果。例如:

SELECT emailid,username FROM table2 WHERE emailid NOT IN (SELECT emailid FROM table1)


使用rawQuery()来执行此类原始SQL查询,而不要使用query()为您构建SQL。

例:

sqlite> create table table2(emailid,username);
sqlite> create table table1(emailid);
sqlite> insert into table1 select '[email protected]';
sqlite> insert into table1 select '[email protected]';
sqlite> insert into table2 select '[email protected]','abcd';
sqlite> insert into table2 select '[email protected]','abcde';
sqlite> SELECT emailid,username FROM table2 WHERE emailid NOT IN (SELECT emailid FROM table1);
[email protected]|abcde


由于@ m0skit0在他的评论中坚持使用,因此让我们用相同的数据演示他的查询:

sqlite> SELECT t2.emailid, t2.username FROM table1 t1, table2 t2 WHERE t1.emailid <> t2.emailid;
[email protected]|abcd
[email protected]|abcde
[email protected]|abcde

10-08 09:02