MySQL 全文搜索不适用于左连接
MySQL Full Text Search not working with left join
我在 table 上使用全文搜索,然后使用来自不同数据库的 table 加入它。
table (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
来解决性能问题。
有没有办法在同一个查询中使用全文搜索和左连接?
编辑:问题似乎与两个 table 不在同一个数据库中这一事实有关。当尝试使用来自同一数据库的两个 table 执行相同的查询时,它有效。知道为什么会发生这种情况吗?
MATCH(t1.name) AGAINST ('searchString' IN BOOLEAN MODE)>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)
如果有任何错误,请告诉我们。
仅供参考 where t2.column1 is not null
将左联接变为联接。
左连接是来自第一个 table 的所有数据,但是当您在右侧 table (第二个)指定 where 子句时,您会强制查询进入连接。这可能是查询不起作用的原因。第2个(右)没有匹配数据table.
我在 table 上使用全文搜索,然后使用来自不同数据库的 table 加入它。
table (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
来解决性能问题。
有没有办法在同一个查询中使用全文搜索和左连接?
编辑:问题似乎与两个 table 不在同一个数据库中这一事实有关。当尝试使用来自同一数据库的两个 table 执行相同的查询时,它有效。知道为什么会发生这种情况吗?
MATCH(t1.name) AGAINST ('searchString' IN BOOLEAN MODE)>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)
如果有任何错误,请告诉我们。
仅供参考 where t2.column1 is not null
将左联接变为联接。
左连接是来自第一个 table 的所有数据,但是当您在右侧 table (第二个)指定 where 子句时,您会强制查询进入连接。这可能是查询不起作用的原因。第2个(右)没有匹配数据table.