這裏是架構的一個畫面:http://i.stack.imgur.com/yr26g.png如何使用減或者不存在
我想創建一個查詢,以找到出版物的數量最多時ICDE,誰沒有在SIGMOD出版的作者。
我認爲我是在正確的軌道上得到作者的最高出版物數量ICDE:
select AUTHOR.NAME, aid, count(PUBLICATION.id)
from PUBLICATION, AUTHORPUBLICATION, CONFERENCE, AUTHOR
where aid=AUTHOR.id and pid=PUBLICATION.id and cid=CONFERENCE.id and CONFERENCE.name='ICDE'
group by AUTHOR.name, aid order by count(PUBLICATION.id) desc;
,但不知道如何形成的查詢,以便它不包括已發表在SIGMOD作者
中我已經試過的東西:
with aut(n,a,i) as
((select AUTHOR.NAME, aid, count(PUBLICATION.id) as cnt
from PUBLICATION, AUTHORPUBLICATION, CONFERENCE, AUTHOR
where aid=AUTHOR.id and pid=PUBLICATION.id and cid=CONFERENCE.id and CONFERENCE.name='ICDE'
group by AUTHOR.NAME, aid)
minus
(select AUTHOR.NAME, aid, count(PUBLICATION.id) as cnt
from PUBLICATION, AUTHORPUBLICATION, CONFERENCE, AUTHOR
where aid=AUTHOR.id and pid=PUBLICATION.id and cid=CONFERENCE.id and CONFERENCE.name='SIGMOD'
group by AUTHOR.NAME, aid))
select n,a,i from aut order by i desc;
,但它似乎並沒有在所有的工作。我有一個列表 author, id, paper_id
或 list of author, id, count(paper)
(我試了兩種方法),因爲紙ID我認爲我有一個不相交的設置,不能得到這個工作。已經花了3小時了:(
我也嘗試過的東西擺脫紙張的id:
with aut(n,a) as
((select AUTHOR.NAME, aid
from PUBLICATION, AUTHORPUBLICATION, CONFERENCE, AUTHOR
where aid=AUTHOR.id and pid=PUBLICATION.id and cid=CONFERENCE.id and CONFERENCE.name='ICDE'
order by count(PUBLICATION.id) desc)
minus
(select AUTHOR.NAME, aid
from PUBLICATION, AUTHORPUBLICATION, CONFERENCE, AUTHOR
where aid=AUTHOR.id and pid=PUBLICATION.id and cid=CONFERENCE.id and CONFERENCE.name='SIGMOD'
order by count(PUBLICATION.id) desc))
select n,a from aut;
,但它說我缺少一個括號我不
我的首選項是不使用減號命令。您可以將join加入到一個子查詢中,該子查詢返回已排除的ID列表和過濾器,其中subquery.id爲null,以僅獲取列表中未包含的列表.... harsh psuedo code:select * from query left join(select ID's不包括在)id = id其中subquery.id爲空。 – Twelfth 2014-09-24 22:50:43