Sql 获取ORA-00907:在左侧没有额外括号时缺少右括号
以下是我的SQL查询:Sql 获取ORA-00907:在左侧没有额外括号时缺少右括号,sql,oracle,Sql,Oracle,以下是我的SQL查询: select hck.hacker_id, hck.name, cnt from ( Hacker as hck inner join ( Select hacker_id, count(challenge_id) as cnt from Challenges group by hacker_id ) chl_count on hck.hacker_id = chl_count.hacker_id )
select hck.hacker_id, hck.name, cnt
from (
Hacker as hck
inner join (
Select hacker_id, count(challenge_id) as cnt
from Challenges
group by hacker_id
) chl_count on hck.hacker_id = chl_count.hacker_id
) having cnt = max(cnt) or
cnt in (select cnt
from chl_count
group by cnt
having count(hacker_id) = 1)
order by cnt desc, hck.hacker_id asc;
这里有一个模式:
Hackers(name, hacker_id)
挑战也有模式
Challenges(hacker_id, ,challenge_id)
我没有看到查询中缺少任何括号。那么,怎么了?此外,其他语法(如逗号)也正确。您似乎是Oracle SQL的新手 你不能这样做:…从黑客作为hck内部加入。。但你可以这样做:
WITH chl_count
AS ( SELECT hacker_id, COUNT (challenge_id) AS cnt
FROM Challenges
GROUP BY hacker_id)
SELECT hck.hacker_id, hck.name, cnt
FROM Hacker hck INNER JOIN chl_count ON hck.hacker_id = chl_count.hacker_id
HAVING cnt = (select max(challenge_id) from Challenges)
OR cnt IN ( SELECT cnt
FROM chl_count
WHERE hacker_id= 1)
ORDER BY cnt DESC, hck.hacker_id ASC;
现在应该可以使用了。HAVING without GROUP BY?@Tejash,作为纯语法,您可以使用HAVING子句而不使用GROUP BY子句。作为逻辑,它可能取决于它是否正确。现在它给出了chl_count的错误*第9行的错误:ORA-00942:表或视图不存在,即使chl_count是there@ShantanuShinde哦你不能那样用。我将使用解决方案更新查询。我刚刚添加了with子句。它会帮助你的。为了更好地理解,请阅读相关内容。该错误已消失,但在第8行的SELECT cnt*错误中没有I get或cnt:ORA-00979:不是一个GROUP BY表达式,我认为Hacker中的错误括号。但你写的查询不正确。因为没有分组,MAXcnt也有。请用正确的结果编写您的测试用例。请提供一些示例输入数据和从该示例派生的预期输出。对您试图实施的业务规则的解释也不会出错。对您来说,告诉我们您想要做什么比从一些损坏的代码中逆向工程您的需求更容易。