我有以下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语句不返回任何行。我是否误解了“不存在”?
答案 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 by
和having
:
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';