worddistinct
是关键字的修饰符SELECT
。所以你需要把它想象成SELECT DISTINCT
它总是在整个行中运行。它只是忽略了下面的括号:
select distinct(ticket_message.ticket_id)
因为 distinct 不是函数。
所以。我们似乎拥有的是带有相关消息的支持票。每个支持票通常有多条消息,所以我怀疑你想要的更复杂。例如,您可能只需要每个支持票证的最新消息。
要获得最新信息,我们需要一个时间戳(或“日期时间”)列,并且我们还需要知道您的数据库是否支持“窗口函数”。假设您有一个时间戳列message_at
,并且您的数据库确实支持窗口函数,那么这将减少行数:
SELECT
support_ticket.ticket_id
, support_ticket.user_id
, support_ticket.support_section
, support_ticket.priority
, support_ticket.subject
, support_ticket.status
, tm.file
, tm.message
, assign_ticket.section_id
, assign_ticket.section_admin_id
FROM support_ticket
LEFT OUTER JOIN (
SELECT
ticket_id
, file
, message
, ROW_NUMBER() OVER (PARTITION BY ticket_id ORDER BY message_at DESC) AS row_num
FROM ticket_message
) tm ON support_ticket.ticket_id = tm.ticket_id
AND tm.row_num = 1
LEFT OUTER JOIN assign_ticket ON tm.ticket_id = assign_ticket.ticket_id
ROW_NUMBER() OVER (PARTITION BY ticket_id ORDER BY message_at DESC)
将数字 1 分配给最近的消息,然后我们忽略所有大于 1 的行,从而消除结果中不需要的重复。
所以。
我们确实需要更多地了解您的实际数据、您正在使用的数据库(和版本)以及您的实际需求。几乎可以肯定 select distinct 不是您想要实现的正确技术。
我建议您阅读以下内容:提供Minimal Complete Verifiable Example
(MCVE)
和我为什么要提供 MCVE