У меня странная проблема с вложенными левыми соединениями в postgresql ... Это сложно объяснить, но легко показать =) вот мы:
SELECT * FROM
(
SELECT 1 as key1
) sub1
LEFT JOIN
(
SELECT sub3.key3, sub4.value2 FROM
(
SELECT 1 as key3
) sub3
LEFT JOIN
(
SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2
FROM
(
SELECT 1 as key5
) sub5
LEFT JOIN
(
SELECT 1 as key6, value1
FROM
(
SELECT NULL::integer as value1
) sub7
WHERE false
) sub6 ON false
)
sub4 ON sub4.key5=sub3.key3
)
sub2 ON sub1.key1 = sub2.key3
Результат этого запроса:
key1;key3;value2
1;1;NULL
И это проблема - value2 не может быть NULL из-за COALESCE в sub4 (по крайней мере, я думаю, что это не может быть =)) В любом случае, если мы изменим
SELECT sub3.key3, sub4.value2 FROM
с
SELECT sub3.key3, value2 FROM
мы получим правильный результат:
key1;key3;value2
1;1;1
Что-то не так с моим умом и руками?или это баг?
Заранее спасибо!