gpt4 book ai didi

mySQL一对多查询

转载 作者:可可西里 更新时间:2023-11-01 07:55:09 25 4
gpt4 key购买 nike

我有 3 个类似这样的表(此处已简化):

  • 用户
    • 用户编号
    • 用户名
  • 信息
    • 信息编号
    • 用户编号
    • 评分
  • 联系人
    • 联系方式
    • 用户编号
    • 联系人数据

用户与信息具有一对一的关系,尽管信息并不总是具有相关条目。

用户与联系人之间存在一对多关系,尽管联系人并不总是具有相关条目。

我知道我可以通过左连接获取正确的“用户”+“信息”,有没有办法一次获取我想要的所有数据?

例如,一条返回的记录可能是:

user_id: 5
user_name: tom
info_id: 1
rate: 25.00
contact_id: 7
contact_data: 555-1212
contact_id: 8
contact_data: 555-1315
contact_id: 9
contact_data: 555-5511

这可以通过单个查询实现吗?还是我必须使用多个?

最佳答案

有可能在一个查询中完成你所要求的,但你要么需要可变数量的列,这很糟糕,因为 SQL 不是为此设计的,要么你必须有一个固定的数字列的数量,这更加邪恶,因为您无法选择合理的固定数量的列。

我建议使用以下两种选择之一:

1.为每个联系人数据返回一行,重复其他列中的数据:

5 tom 1 25.00 7 555-12125 tom 1 25.00 8 555-13155 tom 1 25.00 9 555-5511

当然,这样做的问题是冗余数据通常不是一个好主意,但如果您没有太多冗余数据,那就没问题了。在这里使用你的判断。

2。使用两个查询。这意味着周转时间稍长,但要传输的数据较少。

在大多数情况下,我更喜欢第二种解决方案。

您应该尽量避免在循环内进行大量查询。这几乎总是可以重写为单个查询。但是,如果使用两个查询是解决问题的最自然方法,那么就使用两个查询。不要为了减少查询数量而试图将所有需要的数据塞进一个查询中。

关于mySQL一对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617559/

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