我有两个表:osm和osm_fulltext。第二个表是全文索引,第一个表是常用表。两者都有id = 732048494
的记录sqlite> SELECT objectid FROM osm where objectid=732048494;
732048494
sqlite> SELECT objectid FROM osm_fulltext where objectid MATCH 732048494;
732048494
但是当我与结果相交时,我什么也得不到:
SELECT objectid
FROM osm_fulltext
WHERE objectid MATCH 732048494
INTERSECT
SELECT objectid
FROM osm
WHERE objectid=732048494;
源码>
交叉点应该适用于不同类型的存储吗?
答案 0 :(得分:0)
FTS表将所有数据存储为文本,因此您的ID将作为字符串返回,这与数字不同:
> SELECT 42 INTERSECT SELECT 42;
42
> SELECT 42 INTERSECT SELECT '42';
您可以将ID转换为数字:
SELECT CAST(objectid AS NUMBER) FROM osm_fulltext
但是对于用于搜索表记录的ID,最好使用implicit docid column:
INSERT INTO osm_fulltext(docid, whatever) VALUES(732048494, 'hello');
SELECT * FROM osm_fulltext WHERE docid = 732048494;