sql - 一个与自身没有直接连接的连接的查询
问题描述
所以我想使用一个查询来获取复杂的客户端数据。我已经构建了一个 sql 查询,但它有点慢。
select * from client cli
join contract con on cli.id = con.client_id
join payment pay on con.id = pay.contract_id
join car on cli.id = car.client_id
join address adr on cli.id = adr.client_id
where cli.id in (x, y, z) //up to 1000 clients
正如您所看到的,实体地址/汽车/合同直接与客户关联,但付款与合同关联,然后与客户关联。
我想知道这个查询是否可以以某种方式提升,例如当我们有结构时
client
contract
payment1
payment2
payment3
查询的第一部分
select * from client cli
join contract con on cli.id = con.client_id
join payment pay on con.id = pay.contract_id
生成结果
client contract payment1
client contract payment2
client contract payment3
然后我们有
join car on cli.id = car.client_id
这意味着此连接将运行 3 次?即使在这 3 条记录中只有一个客户 ID ?
也许我应该将我的查询拆分为那些直接加入的和那些有附加连接的
第一次查询
select * from client cli
join contract con on cli.id = con.client_id
join payment pay on con.id = pay.contract_id
第二次查询
select * from client cli
join car on cli.id = car.client_id
join address adr on cli.id = adr.client_id
但后来我需要手动合并它们,这使得理解整个概念变得更加困难。也许我应该将合同连接放在子选择中,或者我应该使用公用表表达式?
解决方案
推荐阅读
- acumatica - 将 DefaultPrice 从 InventoryItem 添加到套件规范
- angular - 单击图块时插入一行
- machine-learning - 如何在pytorch中为卷积层设置lr_mult?
- python-3.x - search() 中的正则表达式语法
- leaflet - 如何删除加载中添加的标记,传单
- excel - 如何在 VBA 项目中创建新的 Excel 工作表并创建给定名称
- r - 是否可以在字符向量上使用 ensyms?
- javascript - Discord 客户端对象在导出后未定义
- javascript - 尝试通过调用 (let x of xy) 来使用迭代器类会产生“SyntaxError: let is a reserved identifier”
- c# - 返回、示例等 XML 文档注释以供在 IDE 中使用