0

假设我编写了一个查询来查找所有成员都不是 1960 年代出生的艺术家的姓名,并编写另一个查询来查找所有成员都不是 1960 年代出生的艺术家的姓名。

所以我们说的是这三个表:

艺术家

ArtistID, ArtistName, Region, EntryDate

成员

MemberId, Firstname, Lastname, Birthday

Aritsts 和 Members 表之间的关系是 XrefArtistsMembers 表:

XrefArtists 成员

MemberId, ArtistID, RespParty

我已经开始查询:

select salesid, firstname, lastname, birthday 
from members 
where year(birthday) >= 1970 or year(birthday) < 1960;

但是对于出现在第一个查询结果中但没有出现在第二个查询结果中的任何艺术家来说,情况如何呢?

4

3 回答 3

0

您可以获取拥有 60 后出生成员的艺术家名单:

SELECT DISTINCT ArtistName
FROM Artists a
JOIN XRefArtistsMembers am ON a.ArtistID = am.ArtistID
JOIN Member m ON m.MemberID = am.MemberID
WHERE YEAR(m.birthday) NOT BETWEEN 1960 and 1969;

要获得没有60 年代出生成员的艺术家:

SELECT DISTINCT ArtistName
FROM Artists a
LEFT JOIN XrefArtistsMembers am ON a.ArtistID = am.ArtistID
LEFT JOIN Member m ON m.MemberID = am.MemberID AND YEAR(m.birthday) BETWEEN 1960 and 1969
WHERE m.MemberID IS NULL
于 2013-10-23T21:36:38.493 回答
0

每个都可以用 IN 或 NOT IN 条件完成:

-- Artists with NO members born in the 60s

SELECT * FROM Artists
WHERE ArtistID NOT IN (
    SELECT ArtistID 
    FROM XrefArtistsMembers x
    INNER JOIN Members m ON x.MemberId = m.MemberID
    WHERE year(birthday) BETWEEN 1960 AND 1969)

-- Artists with ANY member NOT born in the 60s

SELECT * FROM Artists
WHERE ArtistID IN (
    SELECT ArtistID 
     FROM XrefArtistsMembers x
    INNER JOIN Members m ON x.MemberId = m.MemberID
    WHERE year(birthday) NOT BETWEEN 1960 AND 1969
)
于 2013-10-23T21:33:39.043 回答
0

这个问题似乎不是在寻找代码。问题是:

但是对于出现在第一个查询结果中但没有出现在第二个查询结果中的任何艺术家来说,情况如何呢?

因此,第一个查询获取所有成员的某些成员不是 1960 年出生的所有艺术家。第二个查询获取所有没有成员出生于 1960 年的艺术家。因此,您可以确定的是,在第一个查询中返回的艺术家有一些但不是所有成员(非)出生于 1960 年。

于 2013-10-23T21:44:35.877 回答