我正在 Android 中使用 SQLite 数据库,但我被困在进行特定查询:
我有一个表 1,其中包含一些电子邮件 ID,我还有另一个表 2,其中包含电子邮件 ID 以及与这些 ID 对应的用户名。从表 2 中,我只需要发送表 1 中不存在的那些 emailid/用户名。我想使用 android 中的 Cursor 来执行此操作,例如:
Cursor cursor = getReadableDatabase().query(
MY_TABLE,
new String[] {ID},
EMAIL_ID +" = ?",
new String[]{email_id},
null,
null,
null);
先决条件是:
我不想使用表 2 中的删除
我不想在表 2 中创建额外的列。
最佳答案
将 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
关于java - 从 Android 中的数据库表中获取记录时禁用某些记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779938/