【问题标题】:Compare 2 tables using match使用 match 比较 2 个表
【发布时间】:2019-07-03 07:03:54
【问题描述】:

我有 2 个表 table1table2。表 1 由段落组成,它是包含一些公司代码/名称的新闻文章,而表 2 是由 2 列组成的字典,即公司代码和公司名称。

使用 MYSQL FTS 函数 MATCH 我想将文章与表 2 中的所有项目/字典进行比较 (两列)

SELECT * FROM pyproject.table1 WHERE MATCH (Paragraph) against
(SELECT * FROM pyproject.table2' with query expansion);

好像报错了

如何检查文章是否与字典匹配,table1中的数据会被选中,table2中的company code列是与 table1 中的数据一起包含/连接。

所以如果table1中的文章包含多个公司代码,则会被复制并添加适当的公司代码

【问题讨论】:

标签: mysql full-text-search


【解决方案1】:

根据reference you've provided AGAINST 不适用于列。相反,您可以使用LIKE:

SELECT
    t1.Paragraph,
    t2.CompanyCode
FROM pyproject.table1 t1
INNER JOIN pyproject.table2 t2 ON (
    (t1.Paragrah LIKE CONCAT('%', t2.CompanyCode, '%')) OR
    (t1.Paragrah LIKE CONCAT('%', t2.CompanyName, '%'))
    )
;

【讨论】:

  • 我尝试了您的查询并产生错误 "Incorrect argument to AGAINST" ,指的是这篇文章 stackoverflow.com/questions/10465758/… 。似乎不可能与列匹配。
  • @FH337 感谢您的信息。我已更新答案以提供替代解决方案。
  • 它就像魅力先生,谢谢。我添加 WHERE t2.CompanyCode IS NOT NULL OR t2.CompanyName IS NOT NULL;。所以它只会返回有公司代码或公司名称的文章
  • @FH337 嗯,我认为你应该使用INNER JOIN。它只过滤掉两个表中的匹配行。相应地更新了答案。
猜你喜欢
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
相关资源
最近更新 更多