mysql - 在 MySQL 查询中使用 Like 和 Concat

标签 mysql concatenation sql-like

我正在将文本文件加载到数据库中,并尝试在列出组织名称的表和保存文本文件以及与这些组织的潜在匹配项的表之间进行一些快速匹配。

我使用LOAD INFILE CONCURRENT加载文件,没有任何问题。

这种扭曲来自于这样一个事实:我试图在原始文本表中匹配的字段(职业或隶属关系)不仅仅包含组织名称。所以我尝试使用 LIKE 和通配符来匹配字符串。

为了匹配文本,我尝试使用此查询:

UPDATE raw_faca JOIN orgs AS o
    ON raw_faca.org_id IS NULL AND raw_faca.occupationoraffiliation LIKE CONCAT('%',o.org_name,'%')
SET raw_faca.org_id = o.org_id;

我也尝试过不使用CONCAT:

UPDATE raw_faca JOIN orgs AS o
    ON raw_faca.org_id IS NULL AND raw_faca.occupationoraffiliation LIKE ('%' + o.org_name + '%')
SET raw_faca.org_id = o.org_id;

raw_faca 表大约有 40,000 行,orgs 表大约有 20,000 行。我对所有查询都有索引。查询已经运行了几个小时左右——这对于操作来说似乎太长了。我试图进行的比较是否效率低下,或者我在这里做了一些非常愚蠢的事情?我希望避免逐行使用外部 php 或 python 脚本。

回应下面有关使用 Match 的评论。 。 。反对,我也尝试了以下查询:

UPDATE raw_faca JOIN orgs AS o ON raw_faca.org_id IS NULL AND MATCH(raw_faca.occupationoraffiliation) AGAINST (o.org_name IN NATURAL LANGUAGE MODE)
SET raw_faca.org_id = o.org_id; 

它给了我这个错误:

incorrect arguments to AGAINST

有什么想法吗?

最佳答案

带有前导通配符的 LIKE 子句将无法利用任何索引。

关于mysql - 在 MySQL 查询中使用 Like 和 Concat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116078/

相关文章:

php mysql 查询类似(包含)

java - 如何将此代码转换为 prepared-statement 或 jdbc 中的语句?

mysql - MySQL WorkBench 上的错误代码 1022

php - 连接一个函数和一个字符串

mysql - 类似 ruby​​ 的查询错误

mysql - 性能 LIKE 包括通配符 (%)

mysql - Rails 事件记录订单问题

php - 联合中的MySQL查询错误

使用## 和 __LINE__ 创建 C 宏(标记连接与定位宏)

c - c中其他宏串联内的宏串联