NOT EXIST不返回任何行

时间:2018-10-31 14:54:24

标签: sql

我有以下SQL查询

select distinct fnamn,enamn,pubdatum
from author,book
where pubdatum <'1961-0-0 AND author.enamn=book.forfattarenamn;

这很好,它显示的是在1961年之前出版过一本书的所有作者,但是如果我只希望在1961年之前而不是在1961年之后出版的那些作者呢?

我考虑过要添加这样的不存在

select distinct fnamn,enamn,pubdatum
from author,book
where pubdatum <'1961-0-0' AND author.enamn=book.forfattarenamn
AND NOT EXISTS
(select distinct fnamn,enamn,pubdatum
from author,book
where pubdatum >='1961-0-0' AND author.enamn=book.forfattarenamn);

因此,在子查询中,它列出了1961年之后出版的所有作者。据我所知,这现在将这些作者从原始查询中删除。但是运行此SQL语句不返回任何行。我是否误解了“不存在”?

2 个答案:

答案 0 :(得分:1)

您可以这样做(请在ID中插入作者的PK):

select distinct a.fnamn,a.enamn,b.pubdatum
from author as a
inner join book as b ON a.enamn=b.forfattarenamn
where b.pubdatum <'1961-0-0'
AND NOT EXISTS
(select 0
from author as aX
inner join book as bX on ax.enamn=bx.forfattarenamn
where bx.pubdatum >='1961-0-0' AND aX.ID = a.ID);

答案 1 :(得分:0)

  

如果我只希望在1961年之前而不是在1961年之后出版的作者怎么办?

一种简单的方法使用group byhaving

select a.fnamn, a.enamn, max(b.pubdatum)
from author a inner join
     book b 
     on a.enamn = b.forfattarenamn
group by a.fnamn, a.enamn
having max(b.pubdatum) < '1961-01-01';