SQL查找并从列表中返回匹配的关键字

时间:2019-08-19 08:47:30

标签: sql sqlite full-text-search

场景

说我有一个comments表,例如

comment_id | comment
1          | a quick fox jumped over the lazy dog 
2          | a lazy bull slept in the chicken den

我有一个keywords表,

animal_id  | keyword
1          | bull
2          | chicken
3          | dog
4          | fox

问题

  1. 是否可以对显示的关键字进行搜索注释?像instr(comments.comment, keywords.keyword)这样的东西?

  2. 是否可以像这样从表中返回匹配的关键字

comment_id | animal_id
1          | 3
1          | 4
2          | 1
2          | 2

3 个答案:

答案 0 :(得分:1)

如果sqllite的版本大于 3.7.x ,则可以将 instr 函数用作demo Instr 函数在字符串中搜索子字符串,并返回该子字符串的索引(该子字符串的第一个字符)的整数。您可以查看http://www.sqlitetutorial.net/sqlite-functions/sqlite-instr/

select com.comment_id, kword.animal_id 
from comments com
join keywords kword on instr(com.comment, kword.keyword)

答案 1 :(得分:0)

您必须加入表并使用LIKE运算符:

select
  c.comment_id, k.animal_id
from comments c inner join keywords k
on ' ' || c.comment || ' ' like '% ' || k.keyword || ' %'

需要将commentkeyword中的空格串联起来,以确保keyword不仅是注释中单词的一部分。
请参见demo
结果:

| comment_id | animal_id |
| ---------- | --------- |
| 1          | 3         |
| 1          | 4         |
| 2          | 1         |
| 2          | 2         |

答案 2 :(得分:0)

您可以使用CROSS JOINLIKE

SELECT c.comment_id, k.animal_id FROM comments c
CROSS JOIN keywords k
WHERE c.comment LIKE '%' || k.keyword || '%'

enter image description here