SQLite左外部联接在Android中无法正常工作

SQLite左外部联接在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设备上 这

我准备了一个左外部联接查询,当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设备上

这里有一个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
        行数据无关

      注意,您在小提琴中提供的左键连接与示例中的左键连接不同。你要加入两个条件,而不仅仅是一个。