2012-03-09 42 views
1

我有一個名爲'遊戲'與字段:id,team1,team2和日期的MySQL表。我有第二個名爲'隊'的mysql表,其中包含字段:id,name,grade。sql select語句與子查詢(我認爲)

我的目標是選擇日期= 3月1日的所有'遊戲',但同樣在這裏等級= 10。

所以我想我需要某種子查詢,但我不知道SQL足夠好。任何幫助讚賞。

我所知道的,到目前爲止,做的是:

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

非常感謝。我也想單個sql語句...

+0

「遊戲」與「團隊」有什麼關係? 'games.team1'和'games.team2'與'teams.id'有關?不同年級的球隊能夠參加同一場比賽嗎? – 2012-03-09 00:58:21

+0

是'grade'參考'team1'還是'team2'或兩者? – Alp 2012-03-09 00:58:45

+0

@critical.coffee正確,'games.team1'和'games.team2'與'teams.id'有關......每個團隊都有一個等級 – jaredrada 2012-03-09 00:59:54

回答

2

我假設games.team1teams.id有關,因爲是games.team2

您只需將teams錶帶入JOIN查詢。 既然你有games兩列由teams.id列相關teams,您必須使用兩個連接:

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年級的隊伍)。

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"; 

如果球隊只能從同檔次打其他球隊,那麼你可以只檢查一個球隊的成績(而不是兩者)脫身。

+0

完全相同的答案給mathematical.coffee,不過謝謝你 – jaredrada 2012-03-09 01:13:51

+0

是的,我只是晚了30秒。 – Aaron 2012-03-09 01:15:14

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' 
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是名字,那麼你需要使用games.team1 = T 1.分別爲team1和team2命名。

+0

檢查您的第一個查詢。看起來你錯過了INNER JOIN中的ON。 – Aaron 2012-03-09 01:17:48