我有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)
谁能告诉我我错了什么?
谢谢!
答案 0 :(得分:1)
也许这可以让你更好地了解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)
导致: -
因为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 ,因为在这种情况下它确实存在: -
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按照: -
答案 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具有空值,结果可能与预期不同。