我需要有关此问题的帮助。
问题:编写一个SQL查询,列出在美国最古老的动物园中发现的所有物种。
我尝试了以下方法,但确实可行,但是我想知道是否有更简单的方法可以做到这一点。我花了几个小时解决这个问题。
在第一步中,我使用INTO子句创建了一个名为“ usaT”的新表,该表仅容纳美国国家/地区的动物园。单击数据库链接以查看图像。然后,我在第二个代码块中查询此“ usaT”表。
感谢您的帮助
SELECT * INTO usaT
FROM zoos WHERE country='USA';
SELECT species FROM animals, usaT
WHERE year_founded = (SELECT MIN(year_founded) FROM usaT)
AND animals.zoo=usaT.city;
答案 0 :(得分:1)
请勿使用ANSI(ISO之前版本)样式的SQL JOIN(即FROM x, y WHERE x.fk = y.fk
)。始终使用明确的JOIN
。
使用SELECT DISTINCT
可以防止动物园中有1种以上相同物种的动物出现重复结果。
您可以通过执行SELECT TOP 1 ... ORDER BY
(在MS SQL Server中)来获得最早的动物园
LIMIT
。像这样:
SELECT
DISTINCT
animals.species
FROM
animals
INNER JOIN
(
SELECT
TOP 1
city
FROM
zoos
WHERE
country = 'USA'
ORDER BY
year_founded ASC
) AS oldest_zoo_in_usa ON
animals.zoo = oldest_zoo_in_usa.city
SELECT
DISTINCT
animals.species
FROM
animals
INNER JOIN
(
SELECT
city
FROM
zoos
WHERE
country = 'USA'
ORDER BY
year_founded ASC
LIMIT
1
) AS oldest_zoo_in_usa ON
animals.zoo = oldest_zoo_in_usa.city
答案 1 :(得分:0)
查询应为:
Select s.*
from animals a join
zoos z on z.yearFounded=(Select min(year_founded) from zoos) and z.city=a.animals Join
Species s on a.species=s.species
为简单起见,应为所有表的每一行分配唯一标识号,并将其用作连接的主键和外键关系。
答案 2 :(得分:0)
select distinct species
from animals a
join zoos z
on z.year_founded in
(select min(year_founded)
from zoos
where country = 'USA')
and a.zoo = z.city;
希望这会有所帮助。