我有一个带有属性(名称,出发年份)的迁移表和一个带有属性(名称,出生年份)的鹳表。我想编写一个查询,以给出在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个名称
答案 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
)