SQLite TEXT比较不适用于附加数据库

时间:2018-02-28 09:17:55

标签: android ios sqlite

我有2个SQLITE个数据库。两种模式都是一样的。

有一个记录表如下:

CREATE TABLE record_table
(_id INTEGER PRIMARY KEY,hash_key TEXT )

我打开其中一个(作为主要)并将另一个作为A附加并执行以下SQL

select  hash_key from record_table where _id not in 
(select _id from A.record_table)

结果:

  

HASH_KEY      3B12DA00C3394ADB9FB009508B5CE60B_201802208556

1 row returned

我执行以下SQL来检查hash_key(上一个结果)是否在数据库中:

select hash_key from A.record_table where hash_key in 
(select  hash_key from record_table where _id not in 
(select _id from A.record_table))

结果是:

0 rows returned 

因此我认为A数据库中的record_table不包含hash_key =' 3B12DA00C3394ADB9FB009508B5CE60B_201802208556'记录,但主数据库。

所以我认为我可以使用hash_key来查找与第一个SQL相同的结果,并使用以下SQL;

select hash_key from record_table where hash_key not in 
(select hash_key from A.record_table)

但仍然没有返回任何行:

0 rows returned in 13ms from: select _id,hash_key from record_table 
where hash_key not in
(select hash_key from A.record_table)

谁能告诉我我错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

也许这可以让你更好地了解SQL的工作原理。

  • 表位于同一个数据库中(简化

主表的等价物是 record_table_a ,具体如下: -

enter image description here

附加数据库的等价物是record_table_b,具体如下: -

enter image description here

第一个查询

select  _id AS a_id, hash_key from record_table_a where _id not in 
    (select _id from record_table_b)

导致: -

enter image description here

因为id 4 不在table_b中,返回的哈希键是table_a的哈希键(我也显示了id,也来自表a)。有关键 6B12DA00C3394ADB9FB009508B5CE60B_201802208556 在这种情况下会在table_b中显示为id 3。

第二个查询

select _id AS b_id, hash_key from record_table_b where hash_key in 
    (select  hash_key from record_table_a where _id not in 
        (select _id from record_table_b))

在这个场景中,它返回table_b的id 3和table_b的hash_key 6B12DA00C3394ADB9FB009508B5CE60B_201802208556 ,因为在这种情况下它确实存在: -

enter image description here

第三个查询

select _id AS a_id, hash_key from record_table_a where hash_key not in 
   (select hash_key from record_table_b)

在这种情况下,它会从table_a返回id 3和散列密钥 5B12DA00C3394ADB9FB009508B5CE60B_201802208556 ,因为table_a中的hash_key在table_b中的not_exist按照: -

enter image description here

答案 1 :(得分:1)

谢谢MikeT!

我什么时候找到了

 select _id,hash_key from record_table where hash_key not in 
 (select hash_key from A.record_table )

结果:

return 0 rows

如果我添加,其中hash_key不为空

select _id,hash_key from record_table where hash_key not in 
(select hash_key from A.record_table where hash_key is not null )

结果:

"8556"  "3B12DA00C3394ADB9FB009508B5CE60B_201802208556"

因此如果我使用SQL '其中(...)' 和(...)中的xxx具有空值,结果可能与预期不同。