2012-06-21 73 views
1

我的SQL不符合這一點,但我很確定對於SQL專家來說很容易 - 我寧願找出正確的查詢,而不是將邏輯放入PHP腳本中...MySQL以條件加入表格

因此:我有2張桌子,其中一張包含有關俱樂部的信息,特定的比賽以及俱樂部爲該比賽輸入了多少支球隊。第二個表拆分條目進入 「告」

mysql> describe Entries; 
+----------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+----------+---------+------+-----+---------+-------+ 
| ClubId | int(11) | NO | PRI | NULL |  | 
| MatchId | int(11) | NO | PRI | NULL |  | 
| NumTeams | int(11) | NO |  | NULL |  | 
+----------+---------+------+-----+---------+-------+ 
mysql> describe Divisions; 
+----------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+----------+---------+------+-----+---------+-------+ 
| MatchId | int(11) | NO | MUL | NULL |  | 
| ClubId | int(11) | NO | MUL | NULL |  | 
| Team  | int(11) | NO |  | NULL |  | 
| Division | int(11) | NO |  | NULL |  | 
+----------+---------+------+-----+---------+-------+ 

的樣本數據:

Entries: 
1, 1, 1 (Club1, Match1, 1 team) 
1, 3, 2 (Club1, Match3, 2 teams) 

Divisions: 
1, 1, 1, 1 (Club1, Match1, Team1 is in division 1) 
1, 1, 2, 2 (Club1, Match1, Team2 is in division 2) 
1, 2, 1, 1 (Club1, Match2, Team1 is in division 1) 
1, 2, 2, 2 (Club1, Match2, Team2 is in division 2) 
1, 3, 1, 1 (Club1, Match3, Team1 is in division 1) 
1, 3, 2, 2 (Club1, Match3, Team2 is in division 2) 

要求的結果:

1, 1, 1 (Club 1, Match1, Team1) 
1, 3, 1 (Club1, Match3, Team1) 
1, 3, 2 (Club1, Match3, Team2) 

- so not all the rows in Divisions are in the result. 
    e.g, club1, match1, team2 isn't here because there 
    is only one entry in match 1. 

現在Entries.NumTeams可以上去和隨着俱樂部進入或移除球隊而下降。當一個新隊伍進入時,它會被放入第一部分(只是它總是在一個部門)。當隊伍被移除時,他們在分區表中的輸入不會被移除(分區是手動設置的,所以如果有人已經決定了俱樂部X的第二隊屬於第2分區,即使俱樂部X尚未進入第2分區,您也希望保留該信息球隊)。

因此,打印所有的球隊在一個部門,我需要這樣的:

SELECT * FROM Divisions WHERE Divisions.Team <= Entries.NumTeams 
    (for the Entries row with the matching match and club) 

我嘗試這樣做:

SELECT Divisions.* from Entries LEFT JOIN Divisions ON 
    Divisions.MatchId = Entries.MatchId AND Divisions.ClubId = Entries.ClubId 
    WHERE Divisions.Team <= Entries.NumTeams 

但我結束了重複的行。我可能通過使用SELECT DISTINCT來擺脫它們,但這使我認爲我的查詢被打破以開始。我也交換了左右哪個表,但仍然有重複。

明天將嘗試提供的答案。謝謝!

+0

我不明白你在做什麼:'Divisions.Team <= Entries.NumTeams'。 「Divisions.Team」是一個部門的團隊數量嗎?另外,你能否提供更多關於什麼是「匹配」的信息?這聽起來不像是兩隊之間比賽的常見概念。 – Sebas

+0

Divisions.Team列的數據類型是什麼? – EkoostikMartin

+0

你能提供你的表結構的一些數據,所以我們可以測試 –

回答

2

使用DISTINCT將消除duplicite行不同,您的查詢似乎是確定。

+0

我同意,查詢很好,可能的原因是@ John3136的數據很髒。 – EkoostikMartin

+0

好的。謝謝。我同意數據很髒 - 分部有一些條目不符合條目 - 但我有一個很好的理由讓它離開它們,所以這聽起來像'不同'是我必須爲躲閃數據支付的代價。今晚將確認100%。 – John3136

1

在MySQL中使用

SELECT distinct Divisions.* from Entries LEFT JOIN Divisions ON 
    Divisions.MatchId = Entries.MatchId AND Divisions.ClubId = Entries.ClubId 
    WHERE Divisions.Team <= Entries.NumTeams