例如,假设我有以下连接
join on p.match_id = o.match_id
我可以指定,如果p.match_id是偶数
join on p.match_id = o.match_id - 1
但如果它是奇怪的那么
join on p.match_id = o.match_id + 1
我有顺序match_id,连续值代表一个匹配。因此,为了给出一个给定的match_id的对手,我需要上面的
答案 0 :(得分:4)
如果您想将一张桌子加入另一张桌子,而第二张桌子的ID只是偶数,请尝试:
JOIN ON p.match_id = o.match_id AND o.match_id % 2 = 0
或第二个表的ID是奇数:
JOIN ON p.match_id = o.match_id AND o.match_id % 2 = 1
答案 1 :(得分:4)
编辑所以它不使用CASE。子查询返回一个包含一个字段的表:matchid(当match_id为偶数时等于match_id + 1,当match_id为奇数时等于match_id-1)。
SELECT matchid
FROM ( SELECT match_id + 1 - 2*(match_id % 2)
AS matchid
FROM p
) AS p2
JOIN o
ON p2.matchid = o.match_id
;
既然你提到你正在为一对对手使用一个表和两个序列id,你也可以使用以下作为子查询或视图:
SELECT match_id
, ((match_id + 1) DIV 2) AS pair
FROM p
;
它将为您提供一个表格,然后您可以自行收集:
| match_id | pair |
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 3 |
| 6 | 3 |
答案 2 :(得分:1)
我认为如果您只希望加入p.match_id
个值,那么您需要做的有点不同:
join on p.match_id = o.match_id and p.match_id = p.match_id div 2 * 2
同样,如果他们应该是奇怪的:
join on p.match_id = o.match_id and p.match_id = p.match_id div 2 * 2 + 1
但和其他人一样,我很好奇为什么你需要那个。 id列只是id列。通常,您不应该对id列的特定特征感兴趣。