mySQL一对多查询

Sto*_*ped 3 mysql

我有3个像这样的表(在这里简化为ofc):

  • 用户
    • 用户身份
    • 用户名
  • 信息
    • info_id
    • 用户身份
  • 往来
    • CONTACT_ID
    • 用户身份
    • contact_data

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

用户与联系人之间存在一对多关系,但联系人并不总是有相关条目.

我知道我可以通过左连接获取正确的'用户'+'信息',有没有办法立即获得我想要的所有数据?

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

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
Run Code Online (Sandbox Code Playgroud)

单个查询可以实现吗?或者我必须使用多个?

Mar*_*ers 5

可以在一个查询中执行您要求的操作,但是您需要一个可变数量的列,这是邪恶的,因为SQL不是为此而设计的,或者您必须具有固定数量的列,这更加邪恶,因为你可以选择没有合理固定数量的列.

我建议使用以下两种方法之一:

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

5 tom 1 25.00 7 555-1212
5 tom 1 25.00 8 555-1315
5 tom 1 25.00 9 555-5511

当然这个问题是冗余数据通常是一个坏主意,但如果你没有太多的冗余数据就可以了.在这里使用你的判断.

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

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

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