WHERE子句练习中的子查询

时间:2019-07-11 17:14:45

标签: mysql sql

我有一个带有属性(名称,出发年份)的迁移表和一个带有属性(名称,出生年份)的鹳表。我想编写一个查询,以给出在2002年最年轻的鹳出生之前迁移的所有鹳的名称(使用主查询中的迁移表和WHERE子句的子请求中的Stork表)。 N.B:除非有必要/强制性

,否则不得使用WHERE,GROUP BY,ORDER BY,LIMIT等子句
Migration table
Name        DEPARTURE YEAR   
Annamarie   2001   
Felix       2002
Annamarie   2003
Felix       2004
Jonas       2001

Stork table
Name       YEAROFBIRTH
Annamarie   1998
Felix       1999
Max         2000
Jonas       2001
Christina   2002

使用DISTINCT运算符可以得到15个名字的期望结果,删除DISTINCT运算符可以给我25个名字的重复名字

SELECT DISTINCT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR IN(SELECT stork.YEAROFBIRTH
FROM stork
WHERE stork.YEAROFBIRTH <2002)

我希望在不使用DISTINCT运算符的情况下获得15个名称

2 个答案:

答案 0 :(得分:1)

只需按预期的结果进行操作,而您的示例使用的是文字年份;这应该就是您所需要的。

SELECT DISTINCT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR < 2002
;

但是,如果您不想使用文字年份,则可以使用子查询来确定它,如下所示:

SELECT DISTINCT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR < (SELECT MAX(stork.YEAROFBIRTH) FROM stork)
;

答案 1 :(得分:0)

试试这个-

SELECT NAME -- You can apply DISTINCT if required 
FROM Migration
WHERE Name IN (
    SELECT Name FROM Stork
    WHERE YEAROFBIRTH < 2002
)