java - 从 Android 中的数据库表中获取记录时禁用某些记录

标签 java android sqlite cursor

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

相关文章:

java - Jpa 事务 javax.persistence.RollbackException : Transaction marked as rollbackOnly

java - 当我关闭我的应用程序时,为什么我的 Android 应用程序 Activitie 会重新打开

Android SQLite 显示错误

sql - 两列上的唯一索引是否意味着每列都有一个索引?

sql - 如何通过另一个计算列使用计算列

java - 编码新手,不断收到不兼容的错误

java 如何使用socket获得更快的速度

java - 如何以编程方式执行异或运算

android - 从配对设备中选择第一台设备

android - 在 Google Cast 上进行多播