SQL-返回表中重复值的情况

时间:2019-01-09 11:55:19

标签: mysql sql

我正在尝试在sql查询中获取'CE.TITLE'列表中重复的所有值的'more'。我做了一个简短的案例,但以错误告终。

CASE
    WHEN having count(CE.TITLE) > 1
    THEN 'More'
    ELSE 'ok'
END as more than one job

Error:
ORA-0093: missing expression
0036. 0000 -  "missing expression"
*Cause:    
*Action:
Error at Line: 46 Column: 10

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

having不适合:

(CASE WHEN count(CE.TITLE) > 1
      THEN 'More'
      ELSE 'ok'
 END) as more_than_one_job

这修复了语法错误,并假定整体查询是聚合查询。如果没有,则可以使用窗口函数(在MySQL 8+中)。我猜您真正想要的逻辑是:

(CASE WHEN count(*) over (partition by CE.TITLE) > 1
      THEN 'More'
      ELSE 'ok'
 END) as more_than_one_job

在早期版本中,您可以使用相关子查询。我的偏好是:

(CASE WHEN EXISTS (SELECT 1
                   FROM ce ce2
                   WHERE ce2.title = ce.title AND
                         ce2.id <> ce.id
                  )
      THEN 'More'
      ELSE 'ok'
 END) as more_than_one_job