我有桌子比賽
| id_match | id_team1 | id_team2 |
|---|---|---|
| 1個 | 美國 | 日本 |
| 2個 | 澳大利亞 | 美國 |
| 3個 | 能夠 | POL |
| 4個 | POL | 美國 |
和桌子隊
| id_team | 姓名 |
|---|---|
| 美國 | 美國 |
| 日本 | 日本 |
| ... | ... |
我想回傳一張從未像這樣互相比賽過的球隊的新表格
| id_team1 | id_team2 |
|---|---|
| 美國 | 澳大利亞 |
| 能夠 | 美國 |
| ... | ... |
我想我必須使用交叉連接和減法,但我想不出具體該怎么做。如果有人能想到怎么做,或者更簡單的方法,我將不勝感激!
uj5u.com熱心網友回復:
您可以將 teams 表與其自身交叉連接以生成所有可能的匹配組合,然后排除那些已經發生的匹配not exists:
如果您同時想要 team1/team2 和 team2/team1 游戲,則:
select t1.id_team id_team1, t2.id_team id_team2
from teams t1
inner join teams t2 on t1.id_team != t2.id_team
where not exists (
select 1 from matches m where m.id_team1 = t1.id_team and m.id_team2 = t2.id_team2
)
如果你想在每對球隊之間進行一場比賽,那么我們需要添加一些條件邏輯:
select t1.id_team id_team1, t2.id_team id_team2
from teams t1
inner join teams t2 on t1.id_team < t2.id_team
where not exists (
select 1
from matches m
where t1.id_team = least(m.id_team1, m.id_team2)
and t2.id_team = greatest(m.id_team1, m.id_team2)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534366.html
上一篇:PHP-防止重疊保留
