您可能应该尝试使用LIKE
或RLIKE
匹配描述列。在这种情况下,您想要匹配多个备选方案,因此我将仅展示一个示例。
让我们假设我们有这个包含同义词的表。请注意,我们已将单词本身添加为同义词:
+---------+-----------+
| word | synonym |
+---------+-----------+
| leaflet | leaflet |
| leaflet | brochure |
| leaflet | hand bill |
| skin | skin |
| skin | leather |
| skin | hide |
+---------+-----------+
你没有给出一个示例表,所以我发明了一个名为items
:
+---------+-------------------+-----------------------------------+
| item_id | brief | description |
+---------+-------------------+-----------------------------------+
| 1 | Diamond | This brochure is glossy and shiny |
| 2 | Halloween Special | A leaflet for the Halloween |
| 3 | Pumpkin | This is just a Halloween pumpkin |
+---------+-------------------+-----------------------------------+
现在,我们假设您要查找描述中包含“leaflet”同义词之一的所有行。以下查询完成了这项工作:
SELECT * FROM items
WHERE description RLIKE (
SELECT
CONCAT('.*(', GROUP_CONCAT(synonym SEPARATOR '|'), ').*')
FROM synonyms
WHERE word = 'leaflet'
GROUP BY word
);
内部选择创建一个匹配同义词之一的正则表达式,外部选择将此正则表达式应用于description
我们items
表的列。