我有3个像这样的表(在这里简化为ofc):
用户与信息具有一对一的关系,但信息并不总是具有相关条目.
用户与联系人之间存在一对多关系,但联系人并不总是有相关条目.
我知道我可以通过左连接获取正确的'用户'+'信息',有没有办法立即获得我想要的所有数据?
例如,一条返回的记录可能是:
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)
单个查询可以实现吗?或者我必须使用多个?
可以在一个查询中执行您要求的操作,但是您需要一个可变数量的列,这是邪恶的,因为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.使用两个查询.这意味着周转时间稍长,但传输的数据较少.
在大多数情况下,我更喜欢第二种解决方案.
您应该尽量避免在循环中进行大量查询.这几乎总是可以重写为单个查询.但是,如果使用两个查询是解决问题的最自然的方法,那么只需使用两个查询.不要为了减少查询次数而尝试将所需的所有数据塞入单个查询中.
| 归档时间: |
|
| 查看次数: |
5347 次 |
| 最近记录: |