我在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