我有一个包含此架构的表:
|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”(右边或内部结果是相同的)
感谢
答案 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)