仅显示2个查询中相同的结果

时间:2014-09-29 07:15:25

标签: mysql sql

所以我有1个(一个)表包含一个游戏列表。例如:

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

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

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

我有大约4,000行像这样。 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所以任何帮助将不胜感激! 非常感谢你。

5 个答案:

答案 0 :(得分:2)

您的查询将返回$team1$team2所播放的任何游戏。根据您的问题,我了解您确实希望任何$team1对抗$team2的游戏,所以我试试

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

虽然 也可以使用union获得相同的结果,但是如果您在两列都有索引,那么它将更容易理解,也可能更快地这样做

答案 1 :(得分:0)

您可以使用逻辑运算符执行此操作:

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

答案 2 :(得分:0)

请尝试以下操作。

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

或者您可以在WHERE子句中指定两个参数以消除UNION的使用。

答案 3 :(得分:0)

如果它可以是任何一个地方的任何一个团队,你可以将它们全部OR:

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

但正如其他人所提到的,你可能只希望同时拥有team1和team2的行(以任意组合方式)。在这种情况下 - @Mureinik在我面前得到了答案。

答案 4 :(得分:0)

使用UNION ALL代替UNION。就是这样。