【发布时间】:2016-05-26 20:55:15
【问题描述】:
很抱歉这个新手问题,但在过去的几个小时里,我一直在为一件再简单不过的事情而烦恼。
我有一张桌子(single_elim):
id_tournament phase player1 player2
1 1 1 2
1 1 3 4
1 1 5 10
我正在尝试编写一个查询,给定一名玩家给我他的对手。 不幸的是,我不知道玩家是在 player1 列还是 player 2 列(但我知道它们是互斥的)列,所以我希望一个可能的解决方案是:
SELECT p AS opponent FROM (
(
SELECT player1 as p FROM single_elim
WHERE
id_tournament = 1 AND
phase = 1 AND
player2 = 4
) UNION ALL (
SELECT player2 as p FROM single_elim
WHERE
id_tournament = 1 AND
phase = 1 AND
player1 = 4
)
) x;
但是该语句返回 0 行。
如果我运行单个语句:
SELECT player1 as p FROM single_elim
WHERE
id_tournament = 1 AND
phase = 1 AND
player2 = 4
假设 player2 将在第 4 列,那么它可以工作,我得到 p = 3 的单行结果。
我也尝试过UNION,并且我还尝试过我希望能够工作的不同类型的查询,我的结论是我缺少一些关于联合工作原理的基本知识,但是经过一些研究我还没有设法弄清楚出来吧。
另一个单独工作但不能与联合一起工作的查询示例是:
SELECT * FROM (
SELECT COUNT(*) as n, player2 as p FROM helper
WHERE id_tournament = 1 AND player1 = 4 AND phase = 1
) UNION ALL (
SELECT COUNT(*) as n, player1 as p FROM helper
WHERE id_tournament = 1 AND player2 = 4 AND phase = 1
)
) x WHERE n = 1;
感谢任何帮助,非常感谢。
【问题讨论】:
标签: mysql database union union-all