1

我在一个表上使用全文搜索,然后将它与来自不同数据库的表连接起来。表 ( table1) 具有在列上定义的全文索引name

当我尝试使用全文搜索时,以下查询不起作用:

SELECT t1.id, t2.id, t2.url
FROM `db1`.table1 t1
LEFT JOIN `db2`.table2 t2
ON t1.column1 = t2.column1
WHERE t2.column1 IS NOT NULL
AND MATCH (t1.name) AGAINST ('searchString' IN NATURAL LANGUAGE MODE)

但是在没有左连接的情况下使用它时,查询可以工作:

SELECT t1.id
FROM `db1`.table1 t1
WHERE MATCH (t1.name) AGAINST ('searchString' IN NATURAL LANGUAGE MODE)

注意:我不能使用LIKE %searchString%, 而不是match-against性能问题。

有没有办法在同一个查询中使用全文搜索和左连接?

编辑:似乎问题与两个表不在同一个数据库中的事实有关。当尝试对来自同一个数据库的两个表进行相同的查询时,它可以工作。知道为什么会发生这种情况吗?

4

3 回答 3

0
MATCH(t1.name) AGAINST ('searchString' IN BOOLEAN MODE)>0
于 2017-02-13T10:50:11.707 回答
0

是的,我们可以在同一个查询中使用全文搜索和左连接。

检查示例和查询。:链接

        SELECT t1.id, t2.id, t2.url
        FROM `db1`.table1 t1
        LEFT JOIN `db2`.table2 t2
        ON t1.column1 = t2.column1 and t2.column1 IS NOT NULL
        where MATCH (t1.name) AGAINST ('searchString' IN NATURAL LANGUAGE MODE)

请让我们知道,如果有任何错误。

于 2017-02-13T11:21:30.817 回答
0

仅供参考where t2.column1 is not null,将左连接变为连接。左连接是来自第一个表的所有数据,但是当您在右表(第二个)上指定 where 子句时,您会强制查询进入连接状态。这可能是查询不起作用的原因。第二个(右)表中没有匹配的数据。

于 2017-02-13T14:47:45.313 回答