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

问题描述 投票:0回答:2

我有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)

谁能告诉我我错了什么?

谢谢!!

android ios sqlite
2个回答
1
投票

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

  • 表格在同一个DB中(为简化起见)

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

enter image description here

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

enter image description here

The 1st query

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

因为id4不在table_b中,返回的散列键是table_a的散列键(我也显示了id,也来自表a)。在这种情况下,具有密钥6B12DA00C3394ADB9FB009508B5CE60B_201802208556在table_b中出现为id 3。

The 2nd query

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

The 3rd query

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中不存在,如下所示: -

enter image description here


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不为null的地方

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 in(...)'和(...)具有null值,结果可能与预期的不一样。

© www.soinside.com 2019 - 2024. All rights reserved.