带子查询的sql select语句(我认为)

时间:2012-03-09 00:56:14

标签: mysql subquery

我有一个名为'games'的mysql表,其中包含以下字段:id,team1,team2和date。我有一个名为'teams'的第二个mysql表,其中包含以下字段:id,name,grade。

我的目标是选择日期= 3月1日的所有“游戏”,但是那时等级= 10。

所以我想我需要某种子查询,但我不太了解sql。任何帮助表示赞赏。

到目前为止,我所知道的只有:

("SELECT * FROM games WHERE date = '2012-03-01'")

非常感谢。我也想要一个单独的SQL语句......

4 个答案:

答案 0 :(得分:2)

我假设games.team1teams.id相关,games.team2也是如此。

您只需将teams表格带入JOIN的查询中即可。 由于games中有两列与teams列的teams.id相关,因此您必须使用两个联接:

SELECT games.*
FROM games
JOIN teams t1 ON games.team1 = t1.id
JOIN teams t2 ON games.team2 = t2.id
WHERE date = '2012-03-01'
AND t1.grade = 10
AND t2.grade = 10

我已经指定两支球队都在10年级,但如果你想要至少有一支球队进入10年级,你可以将其改为OR。(比如说有一支12年级球队的比赛10年级队伍。

答案 1 :(得分:2)

您需要使用JOIN来解决此问题。该解决方案假设“team1”和“team2”代表团队表中的“id”。

SELECT g.*
FROM games g
INNER JOIN teams t1 ON t1.id = g.team1
INNER JOIN teams t2 ON t2.id = g.team2
WHERE g.date = '2012-03-01'
AND t1.grade = "10th"
AND t2.grade = "10th";

如果球队只能参加同一年级的其他球队,那么你只能检查一支球队的成绩(而不是两者)。

答案 2 :(得分:0)

SELECT g.* FROM games g
JOIN teams t ON t.grade = 10 AND (t.id = g.team1 OR t.id = g.team2)
WHERE g.date = '2012-03-01'

答案 3 :(得分:0)

如果games.team1和games.team2是团队的id值,那么

SELECT * 
FROM games 
INNER JOIN teams ON games.team1 = teams.id WHERE date = '2012-03-01' AND teams.grade=10
UNION
SELECT * 
FROM games 
INNER JOIN teams ON games.team1 = teams.id WHERE date = '2012-03-01' AND teams.grade=10

会为你提供任何一支球队都是10年级的比赛。

如果你想只有10年级的成对队伍

SELECT * 
FROM games 
INNER JOIN teams T1 ON games.team1 = T1.id 
INNER JOIN teams T2 ON games.team2 = T2.id 
WHERE T1.grade=10 AND T2.grade=10 AND games.date  = '2012-03-01'

如果team1和team2是名称,那么你需要分别对team1和team2使用games.team1 = T1.name。