问题描述
我有一个全文搜索查询,需要使用搜索查询(实际搜索)和不使用搜索查询(仅提供分页的结果列表)来执行。
我有这样一个结构,有一个 Meeting
表可以(通过其他表)有两个 User
(别名:member
和 sp
)。这就是为什么我需要使用 max
聚合函数(以便将“user”表中的两条数据合并为一行)。
但是,当我使用 where
子句时,列 member_fullname
和 member_id
都等于 NULL
。如果我删除 where
子句,一切都会按预期进行。
我真的不明白为什么会发生这种情况以及 where
子句如何导致这种情况。 max
函数似乎以某种错误的方式开始工作。
下面是我的 sql 查询。
如果我删除 where
子句,一切正常。如果添加 where
子句,则 member_fullname
和 member_id
列变为 NULL
。
with search as (
SELECT
to_tsquery(string_agg(lexeme || ':*',' | ' order by positions)) as query
FROM unnest(to_tsvector('sp2'))
)
SELECT
meeting.*,business.company as member_company,companydepartment.name as sp_company,department.name as member_department,project.baseprice as meeting_price,max(case when salesprofile.userid = "user".id then "user".id end) as sp_id,max(case when salesprofile.userid = "user".id then "user".firstname || ' ' || "user".lastname end) as sp_fullname,max(case when business.userid = "user".id then "user".id end) as member_id,max(case when business.userid = "user".id then "user".firstname || ' ' || "user".lastname end) as member_fullname,count(*) over() as total_count
FROM
search,meeting
join project on project.id = meeting.projectid
left join business on business.id = project.businessid
left join departmentdetail on business.id = departmentdetail.businessid
left join department on department.id = departmentdetail.department
left join salesprofile on salesprofile.id = meeting.salesprofileid
left join companydepartment on salesprofile.id = companydepartment.salesprofileid
join "user" on "user".id = business.userid or "user".id = salesprofile.userid
WHERE
to_tsvector(array_to_string(array[
"user".firstname,"user".lastname,"user".email,business.company,companydepartment.name,meeting.zoommeetinguuid,meeting.zoommeetingid,meeting.zoomlink,meeting.pendingtext,meeting.requestedtext,meeting.status,meeting.id::text
],' '))
@@ query
GROUP BY
meeting.id,business.userid,salesprofile.userid,project.baseprice,departmentdetail.department,department.name
order by id ASC nulls last
offset 0
limit 100;
这是否是一个 group by
问题?
你能帮我完成这项工作吗?
并解释为什么无害的where
子句会以这种方式影响查询结果?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)