我有一个名为“排除”的表,其中包含主题标签:
-------------
id | tag
-------------
1 #oxford
2 #uk
3 #england
-------------
我有另一个名为“post”的表:
-----------------------------------------------
id | tags | text
1 #oxford #funtimes Sitting in the sun
2 #oz Beach fun
3 #england Milk was a bad choice
-----------------------------------------------
为了对帖子标签进行文本搜索,我一直在运行如下查询:
SELECT * FROM post WHERE to_tsvector(tags) @@ plainto_tsquery('mysearchterm')
但是,我现在希望能够排除部分或全部标签在我的排除表中的所有帖子。在 SQL/Postgres 中是否有任何简单的方法可以做到这一点?
我尝试将标签行转换为一列,并在 plainto_tsquery 函数中使用该术语,但它不起作用(我不知道如何进行文本搜索“不等于”,因此逻辑实际上是错误的,尽管在我看来是正确的):
select * from post where to_tsvector(tags) @@ plainto_tsquery(
select array_to_string(array(select RTRIM(value) from exclude where key = 'tag'), ' ')
)