我需要通过自然语言对 mySQL 表字段进行研究,并将另一个表字段的值作为输入。我尝试了类似的方法,但正如我所怀疑的那样,这是不正确的:
SELECT id, name, MATCH(name),
AGAINST
(
SELECT name
FROM table2
) AS score
FROM table1
WHERE MATCH(name),
AGAINST
(
SELECT name
FROM table2
)
任何想法?
更新 1
我按照下面的示例进行操作,但出现错误“#1064 - 'tb2 附近的 SQL 查询语法错误”。我看不到这个语法错误。这是我正在测试的代码:
SELECT name, MATCH(name) AGAINST
(
(SELECT name
FROM
(
SELECT name
FROM active_ingredients
UNION ALL
SELECT active_ingredients.name as name
FROM active_ingredients
INNER JOIN temp_active_ingredients_aliases ON temp_active_ingredients_aliases.alias_name = active_ingredients.name
) tbl
GROUP BY name
HAVING count(*) = 1
ORDER BY name) tb2
) AS score
FROM
(
SELECT alias_name as name
FROM temp_active_ingredients_aliases
)
WHERE MATCH(name) AGAINST
(
(SELECT name
FROM
(
SELECT name
FROM active_ingredients
UNION ALL
SELECT active_ingredients.name as name
FROM active_ingredients
INNER JOIN temp_active_ingredients_aliases ON temp_active_ingredients_aliases.alias_name = active_ingredients.name
) tb3
GROUP BY name
HAVING count(*) = 1
ORDER BY name) tb4
)
内部查询返回与 temp_active_ingredients_aliases.alias_name 字段中的至少一个不完全匹配的 active_ingredients.name 列表。这样我就可以通过自然语言 FULLTEXT 研究尝试将不完全匹配的名称与 alias_name 进行匹配。需要注意的是,以下内部查询工作正常:
SELECT name
FROM
(
SELECT name
FROM active_ingredients
UNION ALL
SELECT active_ingredients.name as name
FROM active_ingredients
INNER JOIN temp_active_ingredients_aliases ON temp_active_ingredients_aliases.alias_name = active_ingredients.name
) tbl
GROUP BY name
HAVING count(*) = 1
ORDER BY name
我很确定语法错误非常愚蠢,但我看不到它。
更新 2
这里是生成两个表(模式和一些数据)的代码的链接