SQL加入条件,多个结果

时间:2016-11-30 17:14:07

标签: sql sql-server join

我使用Library数据库练习SQL,如下图所示你可以看到一些表是如何连接的。

enter image description here

我需要回复1996年以前出生的有孩子(少年)的图书馆成年人的收件人。我准备了SQL声明。 这个陈述对吗?可能不是,可以选择地址对于各种成员来说可以是相同的。我不知道如何接受这份声明。

SQL语句:

SELECT DISTINCT a.street,a.city,a.state,a.zip FROM adult AS a
JOIN juvenile AS j
ON a.member_no = j.adult_member_no
WHERE YEAR(j.birth_date) < 1996

1 个答案:

答案 0 :(得分:2)

这是您的查询:

SELECT DISTINCT a.street, a.city, a.state, a.zip
FROM adult a JOIN
     juvenile j
     ON a.member_no = j.adult_member_no
WHERE YEAR(j.birth_date) < 1996;

假设列和表名称正确,则先验错误。它应该做你想要的。

这是最好的陈述吗?不会。问题是查询需要执行join,然后执行聚合(对于distinct)。编写查询的另一种方法更接近于问题的陈述:

SELECT a.*
FROM adult a 
WHERE EXISTS (SELECT 1
              FROM juvenile j
              WHERE a.member_no = j.adult_member_no AND
                    YEAR(j.birth_date) < 1996
             );

您可以将此查询描述为:&#34;选择在1996年之前出生的少年的成年人。&#34;

请注意,此版本不需要select distinct(除非adult表中存在重复项,否则不太可能)。从技术上讲,这种形式的连接被称为&#34;半连接&#34;。 &#34;半&#34;是因为它可以在第一个匹配的行停止。一旦找到适合某个成年人的少年,就不再需要找到它了。