这是我的问题:
我有几个查询,每个查询都会检索到2列。
示例:
1.-客户 - 达希
2.-客户 - Patr
3.-客户 - Orts
。 。 。
45.-客户 - 轮胎
始终使用不同的列检索客户端。
如果我建立联合的查询结果是这样的:(当然,许多行具有相同的客户端但列的值不同)
Client Dahi Patr Orts ......... Tyre
1 x
1 x
2 x
3 x
3 x
3 x
我想统一查询并像这样检索(每个客户一列,统一一个记录中的不同列):
Client Dahi Patr Orts ......... Tyre
1 x x
2 x
3 x x x
一些想法?
答案 0 :(得分:1)
您想要进行完整的外部联接。以下是四个查询的示例:
select coalesce(q1.client, q2.client, q3.client, q4.client) as client,
q1.Dahi, q2.Patr, q3.Orts, q4.Tyre
from q1 full outer join
q2
on q2.client = q1.client full outer join
q3
on q3.client = coalesce(q1.client, q2.client) full outer join
q4
on q4.client = coalesce(q1.client, q2.client, q3.client);
full outer join
的一个问题是前一个表/子查询的client
列可能是NULL
。这就是连接条件需要coalesce()
的原因。
如果您有客户列表,可以简化此查询。 。 。或者如果为所有子查询计算一个。这是一个例子:
select coalesce(q1.client, q2.client, q3.client, q4.client) as client,
q1.Dahi, q2.Patr, q3.Orts, q4.Tyre
from (select client from q1 union
select client from q2 union
select client from q3 union
select client from q4
) driver left outer join
q1
on q1.client = driver.client left outer join
q2
on q2.client = driver.client left outer join
q3
on q3.client = driver.client left outer join
q4
on q4.client = driver.client;
子查询获取所有客户端的列表(如果它位于单独的表中,则更好)。随后的left outer join
一次引入一个表格。