如何在同一个表中进行完全外连接?

时间:2011-11-17 14:12:08

标签: ms-access

我有一个包含此架构的表:

 |code|time|fk|
 --------------
 |a   |0.1 |2 |
 |b   |0.2 |1 |
 |b   |0.3 |2 |

我想比较所有代码并给我这样的东西:

 |code|time_fk1|time_fk2|
 ------------------------
 |a   |null    |0.1     |
 |b   |0.2     |0.3     |

sql:select code, time_fk1, time_fk2 from table2 as fk1 left join table2 as fk2 on fk1.code=fk2.code where (fk1.fk=1 or fk1.fk is null) and (fk2.fk=2 or fk2.fk is null)

目标是一个完整的外部联接:但是我还没有复杂化,因为即使左/右连接也不起作用

但访问权限只给我这个查询:

 |code|time_fk1|time_fk2|
 ------------------------
 |b   |0.2     |0.3     |

它的行为与内部联接完全相同!如果我在上面的查询中更改了“left”(右边或内部结果是相同的)

感谢

2 个答案:

答案 0 :(得分:1)

select code, SUM(time_fk1), SUM(time_fk2)
from

(   
(select code, time as time_fk1, 0
from table 
where fk=1)

UNION

(select code, 0,time as time_fk2
from table 
where fk=2)
) a

group by code

然而,如果它对两个fk都有时间,那么使用此查询b将在结果中出现两次。

答案 1 :(得分:0)

它充当内部联接,因为WHERE子句中引用了字段(即使您检查的是NULL):如果将约束移动到连接,它应该可以工作。您也可以删除空检查。

select code, time_fk1, time_fk2 
    from table as fk1 
    left join table as fk2 
    on fk1.code=fk2.code 
      and (fk1.fk=1 or fk1.fk is null) and (fk2.fk=2 or fk2.fk is null)