所以我有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所以任何帮助将不胜感激! 非常感谢你。
答案 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。就是这样。