的Oracle SQL:选择所有,再加上复杂的查询
问题描述:
我有这些表建立一个额外的列:
提名:提名奖的表格
NOMINATION_NOMINEES:与FK用户对NOMINATIONS.ID的表的Oracle SQL:选择所有,再加上复杂的查询
一个提名可以被许多被提名者通过ID字段引用。
SELECT a.*, COUNT(SELECT all records from NOMINATION_NOMINEES with this ID) AS "b"
FROM NOMINATIONS a
LEFT JOIN NOMINATION_NOMINEES b on a.ID = b.ID
结果会是什么样子:
ID | NOMINATION_DESCRIPTION | ... | NUMBER_NOMINEES
其中NUMBER_NOMINEES是NOMINATION_NOMINEES表中具有当前行ID的行数。
这是一个很微妙的,我们是喂养这个到更大的系统,所以我希望能与一帮子查询得到这个在一个查询。在这里实现子查询扭曲了我的想法。任何人都知道应该在哪里解决这个问题?
我敢肯定,上述方式不靠近一个体面的方式来这一个,但我不能完全包住我的脑海里围绕这一。
答
它可以用single correlated sub-query in SELECT
clause来完成。
SELECT a.*,
(SELECT COUNT(b.ID) FROM NOMINATION_NOMINEES b WHERE a.ID= b.ID)
FROM NOMINATIONS a
答
您应该能够使用count
为analytic function
:
select a.*,
count(b.id) over (partition by b.id)
from nominations a
left join nomination_nominees b on a.id = b.id