gpt4 book ai didi

mysql - 高效查询一对多关系

转载 作者:行者123 更新时间:2023-11-29 06:04:32 28 4
gpt4 key购买 nike

我有一个数据库,用于存储有关游戏世界的信息。具体来说,我有一个表来存储所有不同的 map ,另一个表来存储每个 map 中的建筑物。一张 map 可以有 0-n 个建筑物,我存储的信息如下:

map (map_id (PK)、map_name)

建筑物(building_id(PK)、building_name、map_id(FK))

我的问题是如何有效地查询数据库以获取 map 及其所有建筑物的名称。例如,我想获取 10 张 map 及其建筑物。

从 map 中选择 * 使用 (map_id) 限制 10 连接建筑物

上面的查询可能返回 10 行或 100 行,但由于每个答案都会重复 map_name,因此结果表中出现如此多的重复似乎相当浪费。

或者,我可以先获取map_ids,然后对每个 map 执行单独的查询。例如:

从 map 限制 10 中选择 map_id

foreach map +id:从建筑物中选择*,其中map_id = x

但是,这又显得很浪费,因为我正在执行 11 个单独的 SQL 查询?

综上所述,第一种方法似乎内存/带宽效率低下,第二种方法似乎 CPU 效率低下。我说得对吗?还有更好的方法吗?

最佳答案

我认为您正在寻找这个:

SELECT * 
FROM buildings
WHERE map_id IN (SELECT map_id from maps limit 10)

编辑:试试这个:

SELECT b.*, (SELECT map_name FROM maps m WHERE m.map_id = p.map_id) 'Map Name'
FROM buildings b
WHERE map_id NOT IN (SELECT map_id from maps limit 10)

关于mysql - 高效查询一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12178954/

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