尝试以良好的性能从 table 获取数据

Trying to fetch data from table with good performance

我正在尝试获取客户和所有者数据

客户
|cnumber |id |
|080204220 |32859471000|
|907501981|6029151000|

角色
|id|type|
|32859471000|所有者|
|6029151000|客户|

结果集
id|number|owner number|type|
|32859471000|080204220 |080204220 |所有者
|6029151000|907501981|080204220 |客户

查询

select c.id,sub.cnumber,c.cnumber, r.roletype
from customer c 
inner join role r on c.id = r.id 
left outer join (select c.cnumber ,r.roletype,c.id
                     from customer c
                     INNER JOIN role r
                     ON c.id = r.id  ) sub on  sub.roletype='owner';

这个查询给出了正确的结果,但是同表的左外连接可能会影响性能,有没有其他方法可以实现这个?

据我所知,您需要在所有其他人中显示一个“所有者”客户。

由于示例数据中只有一个所有者,我将使用“交叉连接”(笛卡尔连接)

select c.id,sub.cnumber,c.cnumber, r.roletype
  from customer c 
 inner join role r on c.id = r.id 
 cross join (select c.cnumber ,r.roletype,c.id
                 from customer c
                 INNER JOIN role r
                 ON c.id = r.id where r.roletype='owner') sub
select c.id,sub.cnumber,c.cnumber, r.roletype
from customer c 
inner join role r on c.id = r.id 
left outer join (select c.cnumber ,r.roletype,c.id
                     from customer c
                     INNER JOIN role r
                     ON c.id = r.id  ) sub on  sub.roletype='owner';

我希望你只使用这个。

select c.id,sub.cnumber,c.cnumber, r.roletype
from customer c 
inner join role r on c.id = r.id 
left outer join (select c.cnumber ,r.roletype,c.id
                     from customer c
                     INNER JOIN role r
                     ON c.id = r.id  ) sub on  sub.roletype='owner';