SQLite左外部联接在Android中无法正常工作
我准备了一个左外部联接查询,当BLOB表中存在一条记录,该记录与事件表中的一条记录匹配时,该查询应该返回非null数据 基本上,数据和查询如下所示: Table A Key Table B Key BlobSQLite左外部联接在Android中无法正常工作,android,sql,sqlite,join,outer-join,Android,Sql,Sqlite,Join,Outer Join,我准备了一个左外部联接查询,当BLOB表中存在一条记录,该记录与事件表中的一条记录匹配时,该查询应该返回非null数据 基本上,数据和查询如下所示: Table A Key Table B Key Blob SELECT A.*, ifnull(A.Key = B.Key, 0) as hasb FROM A LEFT OUTER JOIN B ON A.Key = B.Key 好的,所以我的问题是,这个查询似乎在我尝试使用它的任何地方都有效,除了在Android设备上 这
SELECT A.*, ifnull(A.Key = B.Key, 0) as hasb FROM A
LEFT OUTER JOIN B ON A.Key = B.Key
好的,所以我的问题是,这个查询似乎在我尝试使用它的任何地方都有效,除了在Android设备上
这里有一个SQLFIDLE,它处理实际的表和查询。请注意,查询在那里工作
有人知道为什么这在Android上不起作用吗?我正在测试的设备是运行安卓4.1.1的三星Galaxy S3。我认为您使用
ifnull
太复杂了
这是您的小提琴中的查询:
SELECT ifnull( a.userid = b.userid, 0 ) FROM incidentdata AS a
LEFT OUTER JOIN incidentblob AS b
ON ( a.userid = b.userid ) AND ( a.incidenttag = b.incidenttag );
这就是我要写的问题:
SELECT a.userid, a.incidenttag, b._id, b._id is not null hasb
FROM incidentdata AS a
LEFT JOIN incidentblob AS b
ON a.userid = b.userid AND a.incidenttag = b.incidenttag
它有用吗?如果没有,请提供您正在使用的SQLite版本。无论如何,我很确定问题在于以下几点:
- 理解
不会返回null=null
而是TRUE
null
值在执行null
左连接后,同时出现在
和b.userid
中a.incidenttag
- 我知道你的疑问“似乎在任何地方都适用”
但是,我建议您选择一种替代方案:
SELECT a.*, b.ROWID IS NOT NULL AS hasb FROM a LEFT JOIN b ON a.key IS b.key;
差异:
- 避免
函数调用李>IFNULL
将处理空键值李>a.key是b.key
- 检查
与b.ROWID
行数据无关b