是否可以在COALESCE中使用MATCH AGAINST?

问题描述 投票:0回答:1

是否可以将两个不同表中的COALESCE(x,y)与字符串进行匹配?

这是我的要求(不起作用...)

SELECT COALESCE(title_translations.title,collection.title) 
LEFT JOIN title_translations ON title_translations.ref_collection=collection.id
WHERE MATCH(COALESCE(title_translations.title,collection.title)) AGAINST("string")

如果我尝试仅匹配collection.title,但不能同时匹配两者,则请求正常运行

mysql database full-text-search coalesce
1个回答
0
投票

https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html说:

MATCH()带有逗号分隔的列表,该列表为要搜索的列命名。

通过尝试使用COALESCE(),您正在将字符串表达式传递给MATCH(),而不是列标识符。

这不起作用。


发表您的评论:

MATCH(title_translations.title,collection.title)仍然无法工作,因为您列出的列必须属于一个全文索引,并且每个索引都属于一个表。您无法列出其他表格中的列。另外,如果定义了多列全文索引,则还必须列出定义的列all

我假设在您的情况下,您为每个表中的单列title定义了一个全文索引。

您将需要此:

WHERE MATCH(title_translations.title) AGAINST('string')
   OR MATCH(collection.title) AGAINST('string')

您必须使用两个匹配的术语来执行此操作,因此您必须在每个术语中重复AGAINST。

© www.soinside.com 2019 - 2024. All rights reserved.