首页 > 解决方案 > 一个与自身没有直接连接的连接的查询

问题描述

所以我想使用一个查询来获取复杂的客户端数据。我已经构建了一个 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

但后来我需要手动合并它们,这使得理解整个概念变得更加困难。也许我应该将合同连接放在子选择中,或者我应该使用公用表表达式?

标签: sqlsql-server

解决方案


推荐阅读