我正在使用Android中的SQLite数据库,并且我很难做出特定的查询:
我有一个带有一些电子邮件ID的表1,我有另一个表2,其中包含电子邮件ID和与这些ID相对应的用户名。从表2中我只需要发送表1中没有的那些emailid / usernames。我想在android中使用Cursor执行此操作,如:
Cursor cursor = getReadableDatabase().query(
MY_TABLE,
new String[] {ID},
EMAIL_ID +" = ?",
new String[]{email_id},
null,
null,
null);
先决条件是:
我不想使用表2中的删除
我不想在表2中创建额外的列。
答案 0 :(得分:3)
使用NOT IN
和子选择来过滤查询中的结果。例如:
SELECT emailid,username FROM table2 WHERE emailid NOT IN (SELECT emailid FROM table1)
使用rawQuery()
执行此类原始SQL查询,而不是为您构建SQL的query()
。
示例:
sqlite> create table table2(emailid,username);
sqlite> create table table1(emailid);
sqlite> insert into table1 select 'a@b.c';
sqlite> insert into table1 select 'a@b.c.d';
sqlite> insert into table2 select 'a@b.c.d','abcd';
sqlite> insert into table2 select 'a@b.c.d.e','abcde';
sqlite> SELECT emailid,username FROM table2 WHERE emailid NOT IN (SELECT emailid FROM table1);
a@b.c.d.e|abcde
由于@ m0skit0坚持他的评论,让我们用相同的数据证明他的查询:
sqlite> SELECT t2.emailid, t2.username FROM table1 t1, table2 t2 WHERE t1.emailid <> t2.emailid;
a@b.c.d|abcd
a@b.c.d.e|abcde
a@b.c.d.e|abcde
答案 1 :(得分:0)
您只需要在emailid
和username
字段上join两个表格。
SELECT t2.emailid, t2.username FROM table1 t1, table1 t1a, table2 t2 WHERE t1.emailid <> t2.emailid AND t1a.username <> t2.username
这将为table2
中的所有行提供emailid
或username
table1
中不存在的行。
如果SQL查询中有多个表,则需要使用rawQuery
方法:
private static final String QUERY = "SELECT t2.emailid, t2.username FROM table1 t1, table2 t2 WHERE t1.emailid <> t2.emailid AND t1.username <> t2.usernam";
final Cursor cursor = getReadableDatabase().rawQuery(QUERY, new String[0]);