sql仅在满足条件时选择查询

时间:2015-03-31 13:11:38

标签: sql select ms-access-2010

在MS Access中,我有一个包含作者的两列表(出版物)。名字和他们发表文章的那一年。         作者年         戴维斯1973年         Boyd B 1973         戴维斯1974年         Pit L 1974         ... 我想要检索仅在一年中或在给定年份中发布而不在任何其他年份发布的作者。例如,作者仅在1973年发表文章,并且在任何其他年份都没有发表文章。以下查询并未向我提供:

Select authors, year from publications where year = 1973

这给了那些在1973年出版的人,但他们也可能在其他年份出版。可以用Case完成吗?应该怎么做?谢谢。

3 个答案:

答案 0 :(得分:1)

我会加入一个子查询,其中包含所有其他不属于那一年的出版物,并过滤掉所有加入的记录,所以

Select p.authors, p.year
From Publications p
    left join (Select *
               From Publications
               Where Year <> '1973') a on a.authors = p.authors
Where p.year = '1973'
      and a.name is null

现在,加入Authorscolumn并不理想,但我没有任何主键只能这样做。

答案 1 :(得分:0)

您可以使用此查询获取指定年份中只有一个发布的所有作者。

Select authors, year from publications where year = 1973
group by authors, year
having count (year) = 1

让所有作者只有一个出版物,但如果你知道这一年:

Select authors, year from publications where year = 1973 
and authors not in (
select authors from publications where year <> 1973
)

如果您不知道这一年,但您希望所有作者只有一个出版物:

Select authors, year from publications where authors not in (
select authors from publications
group by authors
having count (authors) = 1
)

答案 2 :(得分:0)

如果我理解正确,您想要选择仅在特定时期内发布的作者。

select Author, Published
From Publications A
Where Published between @fr and @to
and not (exists select 'x' from Publications B where A.Author = B.Author and B.Published not between @fr and @to) Group By Author, Published

参数@fr和@to是您感兴趣的年份