我正在使用 MATCH() AGAINST()
在我的数据库中进行全文搜索。因为我想要来自多个表的数据,所以我创建了一个 VIEW
并在 MARIADB
中使用以下查询格式,
SELECT
DAT1, DAT2, DAT3
FROM VIEW1
WHERE
MATCH (COL1) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) OR
MATCH (COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) OR
MATCH (COL3) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE)
一切正常,但我正在查询中寻找附加输出,那就是我在其中找到搜索结果的列名。
如何在查询输出中获取匹配字符串的名称或别名COL1
、COL2
和COL3
?
最佳答案
您可以在 select
中使用 case
表达式:
SELECT DAT1, DAT2, DAT3,
CONCAT_WS(',',
(CASE WHEN MATCH(COL1) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 THEN 'col1' END),
(CASE WHEN MATCH(COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 THEN 'col2' END),
(CASE WHEN MATCH(COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 THEN 'col3' END)
) as cols
FROM VIEW1
WHERE MATCH (COL1) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 OR
MATCH (COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 OR
MATCH (COL3) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0;
关于mysql - 在 MATCH() AGAINST() 中查找匹配列的名称或别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464667/