MySQL全文搜索无法使用左连接

时间:2017-02-13 10:44:16

标签: mysql sql match-against

我正在使用表格上的全文搜索,并将其与来自不同数据库的表格连接起来。 表(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)

但在没有左边的情况下使用它时,请加入查询WORKS:

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

注意:我无法使用LIKE %searchString%代替match-against来解决性能问题。

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

编辑:似乎问题与两个表不在同一个数据库中的事实有某种关系。当尝试使用同一个数据库中的两个表执行相同的查询时,它可以正常工作。知道为什么会这样吗?

3 个答案:

答案 0 :(得分:0)

MATCH(t1.name) AGAINST ('searchString' IN BOOLEAN MODE)>0

答案 1 :(得分:0)

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

检查示例和查询。 :Link

        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)

如果有任何错误,请告诉我们。

答案 2 :(得分:0)

FYI where t2.column1 is not null将左连接转为连接。 左连接是来自第一个表的所有数据,但是当您在右表(第2个)上指定where子句时,则强制查询进入连接。这可能是查询无效的原因。第二(右)表中没有匹配的数据。