gpt4 book ai didi

mysql - 排除表间记录

转载 作者:行者123 更新时间:2023-11-29 01:53:40 25 4
gpt4 key购买 nike

查看下表。

生成:

+----------+---+----+----+--+
| id_spawn | position | map |
+----------+---+----+----+--+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
+----------+----------+-----+

游戏;

+---------+-----+
| id_game | map |
+---------+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
+---------+-----+

勇士:

+---------+------+----------+
| id_join | game | position |
+---------+------+----------+
| 1 | 1 | 2 |
+---------+------+----------+

我正在尝试从 spawns 中获取 position ,这些 spawns 还没有在 warriors 中使用给特定的 game .第一次尝试我做了:

select s.position
from spawns s
left join games g on g.map = s.map
left join warriors w on w.game = g.id_game
where s.position not in(w.position)
and g.id_game = 1;

The query returns 1 as expected

但是,对于 game = 5,我期望有 2 个可用位置,但收到的结果为空。我假设数据库引擎没有找到 gameswarriors 之间的关系,因为游戏没有 warriors 可以比较。那么,我怎样才能获得这些职位呢?

最佳答案

如果我没理解错的话,对于给定的 gameid 你想返回 spawns 表中没有对应的 positions warriors 表中的位置?如果是这样,这里有一个选项使用 outer join/null 检查。

select s.position
from spawns s
join games g on g.map = s.map
left join warriors w on w.game = g.id_game and s.position = w.position
where g.id_game = 1 and w.id_join is null

顺便说一句,另一种常见的方法是使用not exists。虽然大多数数据库都可以优化该方法,但 mysql 似乎有问题。这里有一些关于此事的好帖子:

关于mysql - 排除表间记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com