我试图从一个表中获取一行,该表与另一个表中的行匹配,而没有在单个查询中存储过程。这可能吗?让我用图形解释。假设我有两个表
我正在尝试获取与所有关键字行匹配的所有段落行。
tbl_paragraph
tbl_keyword
在这里,当我尝试获取与“关键字表”关键字列匹配的段落时。结果将如下所示
尽管我尝试了sql
SELECT a.*
FROM tbl_paragraph AS a
INNER JOIN tbl_keywords b ON a.title LIKE '%b.keyword%'
但是它不起作用。
答案 0 :(得分:1)
我实际上建议不要使用LIKE
,它默认情况下不区分大小写:
REGEXP
与SELECT a.*
FROM tbl_paragraph a
WHERE EXISTS (SELECT 1 FROM tbl_keywords b
WHERE a.title REGEXP CONCAT('[[:<:]]', b.keyword, '[[:>:]]'));
相比,使用REGEXP
而不是大小写敏感的问题的另一个优点是,前者可以让我们使用单词边界。在编写上述查询时,它仅将关键字LIKE
作为一个独立词进行匹配。也就是说,它不匹配we
与weed
。这相当于在常规正则表达式中搜索we
。