我有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)
谁能告诉我我错了什么?
谢谢!!
也许这可以让你更好地了解SQL的工作原理。
主表的等价物是record_table_a,如下: -
附加数据库的等价物是record_table_b,具体如下: -
select _id AS a_id, hash_key from record_table_a where _id not in
(select _id from record_table_b)
结果是 :-
因为id4不在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,因为在这种情况下它确实存在:
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中不存在,如下所示: -
谢谢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值,结果可能与预期的不一样。