0

我试图在 sql 查询中获取“更多”,以获取表中“CE.TITLE”列重复的所有值。我做了一个简短的 CASE,但它以一个错误结束。

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

任何帮助将不胜感激

4

1 回答 1

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
于 2019-01-09T11:56:14.560 回答