我需要一些帮助...
我有2个表,一个包含由用户徒手输入的描述字段,第二个表由2列组成,第一个是组名,第二个是同义词列表。因此,例如,我可能在名为A的组中的同义词表中有三行,其中包含同义词“Leaflet”,“Brochure”,“Hand Bill”。
我需要做的是返回第一个表中的所有行,其中ItemDescription列包含查询变量的任何同义词,可能是“Leaflet”。
所以这应该给我所有在长描述字段中包含“Leaflet”,“Brochure”或“Hand Bill”字样的行。
我只能在ItemDescription字段仅包含要查找的实际单词的情况下执行此操作,实际上这是一个长字列,可能包含50或60个单词,其中任何一个可能是搜索词之一或任何同义词。
所有的帮助都一如既往地感激不尽。 感谢。
答案 0 :(得分:0)
您应该尝试使用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
列。
答案 1 :(得分:0)
感谢您的反馈。我找到了SQL需求的答案:
SELECT *
FROM MainTable a
WHERE EXISTS
(
SELECT 1
FROM (
Select concat('%',Synonym,'%') As cond
From synonyms
Where Synonym Like '%SearchString%'
OR ListRef = ( Select ListRef
From synonyms
Where Synonym Like '%SearchString%')
) с
WHERE a.Description LIKE cond
)
OR ItemDescription Like '%SearchString%'
如果没有最终的OR,我只返回在我的搜索字符串的同义词表中存在某些内容的行,使用OR它还会返回通过同义词找不到的所有直接匹配。