这是一个有效的 SQL 声明吗?
Is this a valid SQL statement?
问题:哪支球队拥有最年轻的运动员,那名运动员叫什么名字?
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
WHERE athleteDateOfBirth = (SELECT MAX(athleteDateOfBirth)
FROM team JOIN athlete ON team.teamId = athlete.teamId)
GROUP BY teamName, athleteFirstName, athleteLastName;
所以我连接了两个表并试图解决这个问题。我已经尝试过 DATEDIFF,但我得到的只是错误。许多不同的错误。
那个子查询行得通吗?
比如,它是否有意义,或者因为我没有使用过 DATEDIFF,我的老师会把它标记为不正确吗?如果我需要在子查询中添加 GROUP BY 语句,我也有点困惑。
试试这个找到最小的:
在 sql 服务器中:
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
where athleteDateOfBirth= (select top 1 athleteDateOfBirth from athlete
order by athleteDateOfBirth desc )
在mysql中:
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
where athleteDateOfBirth= (select athleteDateOfBirth from athlete
order by athleteDateOfBirth desc limit 1)
试一试
SELECT athleteFirstName,
athleteLastName,
teamName
FROM team t
JOIN athlete a ON t.teamId = a.teamId
WHERE athleteDateOfBirth =
(SELECT TOP(1) athlete.athleteDateOfBirth
FROM athlete
ORDER BY athlete.athleteDateOfBirth ASC)
GROUP BY teamName,
athleteFirstName,
athleteLastName;
正在将子查询中的 table 更改为 athlete
。
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
WHERE athleteDateOfBirth = (SELECT MAX(athleteDateOfBirth) FROM athlete)
我认为您可以使用 Limit
或 TOP
关键字来实现它。对于 SQL 服务器使用 top
,对于 MYSql/PostgreSQL 使用 Limit
。
SQL 服务器:
Select top 1 t.TName AS TeamName,a.AName AthleteName,a.athleteDateOfBirth from teamT as t
INNER JOIN athleteT AS a ON t.TeamID=a.TeamID
ORDER BY athleteDateOfBirth DESC;
Link: Demo Link。
MySQL / PostgreSQL:
Select t.TName AS TeamName,a.AName AthleteName,a.athleteDateOfBirth from teamT as t
INNER JOIN athleteT AS a ON t.TeamID=a.TeamID
ORDER BY athleteDateOfBirth DESC
LIMIT 1;
LINK: Demo Code.
问题:哪支球队拥有最年轻的运动员,那名运动员叫什么名字?
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
WHERE athleteDateOfBirth = (SELECT MAX(athleteDateOfBirth)
FROM team JOIN athlete ON team.teamId = athlete.teamId)
GROUP BY teamName, athleteFirstName, athleteLastName;
所以我连接了两个表并试图解决这个问题。我已经尝试过 DATEDIFF,但我得到的只是错误。许多不同的错误。
那个子查询行得通吗?
比如,它是否有意义,或者因为我没有使用过 DATEDIFF,我的老师会把它标记为不正确吗?如果我需要在子查询中添加 GROUP BY 语句,我也有点困惑。
试试这个找到最小的:
在 sql 服务器中:
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
where athleteDateOfBirth= (select top 1 athleteDateOfBirth from athlete
order by athleteDateOfBirth desc )
在mysql中:
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
where athleteDateOfBirth= (select athleteDateOfBirth from athlete
order by athleteDateOfBirth desc limit 1)
试一试
SELECT athleteFirstName,
athleteLastName,
teamName
FROM team t
JOIN athlete a ON t.teamId = a.teamId
WHERE athleteDateOfBirth =
(SELECT TOP(1) athlete.athleteDateOfBirth
FROM athlete
ORDER BY athlete.athleteDateOfBirth ASC)
GROUP BY teamName,
athleteFirstName,
athleteLastName;
正在将子查询中的 table 更改为 athlete
。
SELECT athleteFirstName, athleteLastName, teamName
FROM team t JOIN athlete a ON t.teamId = a.teamId
WHERE athleteDateOfBirth = (SELECT MAX(athleteDateOfBirth) FROM athlete)
我认为您可以使用 Limit
或 TOP
关键字来实现它。对于 SQL 服务器使用 top
,对于 MYSql/PostgreSQL 使用 Limit
。
SQL 服务器:
Select top 1 t.TName AS TeamName,a.AName AthleteName,a.athleteDateOfBirth from teamT as t
INNER JOIN athleteT AS a ON t.TeamID=a.TeamID
ORDER BY athleteDateOfBirth DESC;
Link: Demo Link。
MySQL / PostgreSQL:
Select t.TName AS TeamName,a.AName AthleteName,a.athleteDateOfBirth from teamT as t
INNER JOIN athleteT AS a ON t.TeamID=a.TeamID
ORDER BY athleteDateOfBirth DESC
LIMIT 1;
LINK: Demo Code.