我有一个名为'games'的mysql表,其中包含以下字段:id,team1,team2和date。我有一个名为'teams'的第二个mysql表,其中包含以下字段:id,name,grade。
我的目标是选择日期= 3月1日的所有“游戏”,但是那时等级= 10。
所以我想我需要某种子查询,但我不太了解sql。任何帮助表示赞赏。
到目前为止,我所知道的只有:
("SELECT * FROM games WHERE date = '2012-03-01'")
非常感谢。我也想要一个单独的SQL语句......
答案 0 :(得分:2)
我假设games.team1
与teams.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。