2014-09-29 55 views
1

所以我有1 (一)表包含遊戲列表。例如:只顯示從2個查詢中得到的結果相同

第一行:team1 = abc; team2 = xyz;

第二行:team1 = xyz; team2 = abc;

第三行:team1 = asd; team2 = jkl;

我已經得到了約4000行這樣的。 2隊可能多次打過對方。每一行都是一個單獨的遊戲。

用戶輸入team1名稱和team2名稱,我基本上想要顯示所有匹配的行。所以基本上所有有這兩支球隊參加比賽的球隊。

我曾嘗試:

SELECT * FROM matches WHERE team1 = '$team1' OR team1 = '$team2' 
UNION 
SELECT * FROM matches WHERE team2 ='$team2' OR team2 = '$team1' 

我使用INNER JOIN嘗試了一些更多的東西,但它似乎沒有任何工作。

很新的SQL,所以任何幫助將不勝感激! 非常感謝。

回答

2

您的查詢會返回$team1$team2已玩過的任何遊戲。從你的問題我知道你真正想要的任何遊戲,$team1交手$team2,所以我想嘗試

SELECT * FROM matches 
WHERE 
    (team1 = '$team1' AND team2 = '$team2') OR 
    (team1 = '$team2' AND team2 = '$team1') 

雖然你可以也使用union achive相同的結果,它會更容易理解和可能這樣做也更快,因爲你在兩列都有索引。

0

您可以用邏輯運算符做到這一點:

SELECT * 
FROM matches 
WHERE (team1 = '$team1' AND team2 = '$team2') OR 
     (team1 = '$team2' AND team1 = '$team2') 
0

嘗試以下。

SELECT * FROM matches WHERE team1 = '$team1' AND team2 = '$team2' 
UNION 
SELECT * FROM matches WHERE team1 ='$team2' AND team2 = '$team1' 

或者你可以在WHERE子句中指定兩個參數來消除UNION的使用。

0

如果它可以是任何一支隊伍在任何地方,你可以或者將它們全部:

SELECT * 
FROM matches 
WHERE team1 = '$team1' OR team2 = '$team1' OR 
     team1 = '$team2' OR team2 = '$team2' 

但正如其他人所說的,你可能只需要同時具有TEAM1和TEAM2打對方行(以任一組合)。在這種情況下 - @Mureinik在我之前得到了答案。

0

使用UNION ALL代替UNION。而已。

+0

Erm,'UNION ALL'只是確保* all *行在結果集中,而不僅僅是不同的行。那將如何幫助? – 2014-09-29 07:55:27

相關問題