【问题标题】:Duplicates in SQL when using DISTINCT使用 DISTINCT 时 SQL 中的重复项
【发布时间】:2021-09-18 09:03:11
【问题描述】:

不知道为什么我不断收到与此查询重复。这应该很容易,但由于某种原因我无法弄清楚。

这是我的查询:

SELECT DISTINCT
    STUFF((SELECT 
               ';  ' + 
               CASE
                   WHEN staff.lastname IS NOT NULL 
                       THEN UPPER(REPLACE(RTRIM(staff.lastname), ' ', '') + ', ' + RTRIM(staff.firstname))
                       ELSE UPPER('Not Assigned')
               END
           FROM 
               ca_case_assign ca 
           JOIN 
               staff ON staff.username = ca.staffusername
           JOIN 
               tbl_case c on ca.appid = c.col_caseid
           WHERE 
               ca.clientusername = c.col_username 
           FOR XML PATH('')), 1, 1, '') [CaseManager]

这是我得到的结果:

LOCALSTAFF, THERESA;  LOCALSTAFF, THERESA;  O'MALLEY, ELLEN;  STAFF, STATE;  STAFF, STATE;  STAFF, STATE;  STAFF, STATE;  STAFF, STATE;  STAFF, BC;  STAFF, BC;  STAFF, BC;  STAFF, BC;  STAFF, BC;  STAFF, BC;  STAFF, BC;

这显然是不正确的。

请帮忙,谢谢。

【问题讨论】:

  • 请提供您在此查询中使用的示例数据集,以使其成为minimal, reproducible example。还请为正在使用的 DBMS 实现添加特定标签(例如 MySQL、PostgreSQL、Oracle、MS SQL Server、IBM DB2 等)
  • 尝试在此添加排序 - UPPER(REPLACE(RTRIM(staff.lastname), ' ', '') + ', ' + RTRIM(staff.firstname))...然后把INNER 查询中的不同
  • 您选择一个标量值,在一行中没有什么可区分的。您需要将distinct 放入内部查询
  • 对于 SQL Server 2017+ 也可以使用string_agg,这样更易​​读

标签: sql join select duplicates distinct


【解决方案1】:

内部查询应该使用 distinct:

SELECT
STUFF((SELECT DISTINCT 
           ';  ' + 
           CASE
               WHEN staff.lastname IS NOT NULL 
                   THEN UPPER(REPLACE(RTRIM(staff.lastname), ' ', '') + ', ' + RTRIM(staff.firstname))
                   ELSE UPPER('Not Assigned')
           END
       FROM 
           ca_case_assign ca 
       JOIN 
           staff ON staff.username = ca.staffusername
       JOIN 
           tbl_case c on ca.appid = c.col_caseid
       WHERE 
           ca.clientusername = c.col_username 
       FOR XML PATH('')), 1, 1, '') [CaseManager]

【讨论】:

  • 这有助于消除重复项,但它仍然带着一堆“案例经理”回来,而且不应该有那么多。我不认为数据是问题,我认为这可能与连接有关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多