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
そしてこれが問題です-sub4のCOALESCEのためにvalue2をNULLにすることはできません(少なくとも=))とにかく変更する場合
SELECT sub3.key3, sub4.value2 FROM
と
SELECT sub3.key3, value2 FROM
正しい結果が得られます:
key1;key3;value2
1;1;1
私の心と手に何か問題がありますか?それともバグですか?
前もって感謝します!