【发布时间】:2021-03-27 20:24:06
【问题描述】:
在 PostgreSQL 中跨多个列进行搜索时,有没有办法获得匹配的列名?
假设我有以下表结构和查询:
CREATE TABLE document (
id serial PRIMARY KEY,
document_content VARCHAR
);
CREATE TABLE story (
id serial PRIMARY KEY,
headline VARCHAR
);
-----
SELECT
"document".*,
story.id,
story.headline
FROM
"document"
INNER JOIN story_document AS Documents_join ON "document".id = Documents_join.document_id
INNER JOIN story ON "story".id = Documents_join.story_id
WHERE to_tsvector(document_content) @@ to_tsquery('foo')
OR to_tsvector(headline) @@ to_tsquery('foo');
我正在考虑连接两列的值,运行全文搜索,然后为两列创建子查询并单独重新运行搜索并将结果记录为参考,但这意味着执行搜索 3 次:
SELECT
"document".*,
story.id AS story_id,
story.headline
(SELECT "document".id WHERE to_tsvector(document_content) @@ to_tsquery('foo')) AS "matching_document_id",
(SELECT story_id WHERE to_tsvector(headline) @@ to_tsquery('foo')) AS "matching_story_id"
FROM
"document"
INNER JOIN story_document AS Documents_join ON "document".id = Documents_join.document_id
RIGHT JOIN story ON "story".id = Documents_join.story_id
WHERE to_tsvector(document_content || ' ' || headline) @@ to_tsquery('foo');
我如何获得对以下列的引用:document_content 或标题,其中关键字“foo”在一个查询中找到?
谢谢!
【问题讨论】:
-
抱歉,我已经更新了问题。
-
其实等到两人合体的时候,反正也无所谓了。
-
这很重要。
-
你让我很好奇! :D
标签: postgresql subquery full-text-search inner-join