【发布时间】:2019-04-04 18:57:27
【问题描述】:
我有以下 SQL 查询
select distinct fnamn,enamn,pubdatum
from author,book
where pubdatum <'1961-0-0 AND author.enamn=book.forfattarenamn;
这很好,它显示了在 1961 年之前出版的所有作者,但是如果我只想要 1961 年之前而不是之后出版的作者怎么办?
我想过像这样添加一个 NOT EXISTS
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 语句不会返回任何行。我是否误解了 NOT EXISTS?
【问题讨论】:
-
您的 NOT EXISTS 子查询需要外部表条件。
-
就目前而言,您
NOT EXISTS是“没有作者自 1961 年以来发表过一本书”,而不是“此作者没有发表过自 1961 年以来的书”。 -
为什么不只是介于两者之间? stackoverflow.com/questions/23398632/…
-
因为它不排除在 1961 年之前出版了一本书并且在 1961 年之后又出版了第二本书的作者。
-
我如何给它外部表条件? @jarlh
标签: sql