0

同じ結果になるはずだと思った2つのクエリを作成しました。

SELECT COUNT(*) FROM (
    SELECT DISTINCT ON (id1) id1, value 
    FROM (
        SELECT table1.id1, table2.value 
            FROM table1 
            JOIN table2 ON table1.id1=table2.id 
            WHERE table2.value = '1') 
    AS result1 ORDER BY id1) 
AS result2;

SELECT COUNT(*) FROM (
    SELECT DISTINCT ON (id1) id1, value 
    FROM (
        SELECT table1.id1, table2.value 
        FROM table1 
        JOIN table2 ON table1.id1=table2.id 
    ) 
    AS result1 ORDER BY id1) 
AS result2
WHERE value = '1';

唯一の違いは、一方は SELECT DISTINCT ON 内に WHERE 句があり、もう一方はその外側の SELECT COUNT 内にあることです。しかし、結果は同じではありませんでした。この場合、WHERE 句の位置によって違いが生じる理由がわかりません。誰でも説明できますか?または、この質問を表現するより良い方法はありますか?

4

1 に答える 1

0

これを見る良い方法は次のとおりです。

SELECT DISTINCT ON (id) id, value
  FROM (select 1 as id, 1 as value
        union
        select 1 as id, 2 as value) a;

SELECT DISTINCT ON (id) id, value
  FROM (select 1 as id, 1 as value
        union
        select 1 as id, 2 as value) a
 WHERE value = 2;

問題は、固有の条件と、どこに何が見えるかということです。これは仕様による動作です。

于 2013-04-14T08:15:44.050 に答える