首页 > 解决方案 > 如果匹配关键字,SQL 返回行

问题描述

我有一个很大的字符串列表(在 PostgreSQL 数据库之外),我想通过那个字符串列表(在一个循环中)并想检查字符串的任何部分是否属于一个表。

例如,我有以下两个表:

table name: trigger_keyword
id (int)
keyword (text)

和表 2:

table name: trigger_message
id  int
message text    
trigger_keyword_id int /*this is a fk to id on trigger_keyword */

假设我们在trigger_keyword表中有关键字“天气好”,并且我们有一条消息trigger_message链接到该关键字的 id。

所以下面是一个例子,说明我们表格中的情况

trigger_keyword 表

id                             keyword
-----------------------------------------------------
1    weather good

trigger_message 表

id   message                   trigger_keyword_id
-----------------------------------------------------
1    yes, the weather is good  1

在 SQL 数据库之外的一个字符串中,我们有以下句子

“阿拉斯加的天气好吗?”

我可以写什么 SQL 来返回“是的,天气很好”,因为“天气很好”在我们的trigger_keyword表中?我需要为此使用LIKE吗?我只需要 SQL 部分的帮助。

标签: sqlpostgresql

解决方案


听起来您应该使用全文搜索:

SELECT m.message
FROM trigger_keyword AS k
   JOIN trigger_message AS m ON k.id = m.trigger_keyword_id
WHERE to_tsvector('english', 'is the weather good in Alaska?')
      @@ phraseto_tsquery('english', k.keyword);

推荐阅读