给定两个名为 team 和 Award 的表,我需要根据每个团队的排名为团队分配一个奖项。下面是两张表:
团队
| team_id | 姓名 | 秩 |
|---|---|---|
| 1 | 星星 | 4 |
| 2 | 蠕虫 | 2 |
| 3 | 鸟类 | 1 |
| 4 | 小狗 | 3 |
| 5 | 云 | 5 |
| 6 | 野马 | 8 |
| 7 | 汽车 | 11 |
| 8 | 骆驼 | 7 |
| 9 | 猫 | 9 |
| 10 | 蝗虫 | 6 |
| 11 | 公牛 | 10 |
奖
| 临界点 | 数量 |
|---|---|
| 1 | 10000.00 |
| 2 | 7000.00 |
| 3 | 5000.00 |
| 6 | 2000.00 |
| 10 | 500.00 |
必须将团队分配给这样的奖项:
| 秩 | 临界点 | 数量 |
|---|---|---|
| 1 | 1 | 10000.00 |
| 2 | 2 | 7000.00 |
| 3 | 3 | 5000.00 |
| 4 | 6 | 2000.00 |
| 5 | 6 | 2000.00 |
| 6 | 6 | 2000.00 |
| 7 | 10 | 500.00 |
| 8 | 10 | 500.00 |
| 9 | 10 | 500.00 |
| 10 | 10 | 500.00 |
| 11 | 无效的 | 无效的 |
我以前从未使用过非 equi 连接,但我认为这可能是一个经典示例,其中非 equi 连接会有所帮助。我写了这个 MySQL 查询,它给出了我想要的结果:
SELECT t.name, t.rank, MIN(a.threshold) AS threshold, MAX(a.amount) AS amount
FROM team AS t
INNER JOIN award AS a ON t.rank <= a.threshold
GROUP BY t.team_id
ORDER BY t.rank;
| 姓名 | 秩 | 临界点 | 数量 |
|---|---|---|---|
| 鸟类 | 1 | 1 | 10000.00 |
| 蠕虫 | 2 | 2 | 7000.00 |
| 小狗 | 3 | 3 | 5000.00 |
| 星星 | 4 | 6 | 2000.00 |
| 云 | 5 | 6 | 2000.00 |
| 蝗虫 | 6 | 6 | 2000.00 |
| 骆驼 | 7 | 10 | 500.00 |
| 野马 | 8 | 10 | 500.00 |
| 猫 | 9 | 10 | 500.00 |
| 公牛 | 10 | 10 | 500.00 |
我的问题是,“使用我不理解的非 equi 连接是否存在问题?” 或者换句话说,“有没有更标准的 SQL 方法来解决这个问题?”