1

データ: 私は 2 つのクエリを作成しました。

テーブル名はtest_cur です

    ID_SOURCE_CUR   ID_TARGET_CUR
 -------------  --------------
    A               B
    B               C
    C               D
    D               E
    A               Z
    G               A
    K               A
    Q               A
    J               J
    K               K
    K               L
    L               K
    B               A
    Z               A

では、なぜ以下の 2 つのクエリが異なる結果を返すのでしょうか?

    SELECT *
      FROM test_cur tu, test_cur fu
     WHERE tu.id_target_cur = 'A'
       AND fu.id_source_cur = 'A'
       AND tu.id_source_cur <> fu.id_target_cur;

returns 8 rows.

ID_SOURCE_CUR   ID_TARGET_CUR   ID_SOURCE_CUR_1 ID_TARGET_CUR_1
--------------  --------------   --------------  -------------- 
    G               A               A               B
    K               A               A               B
    Q               A               A               B
    Z               A               A               B
    G               A               A               Z
    K               A               A               Z
    Q               A               A               Z
    B               A               A               Z 

と -

    WITH qry1 AS
         (SELECT *
            FROM test_cur)
    SELECT *
      FROM qry1 tu, qry1 fu
     WHERE tu.id_target_cur = 'A'
       AND fu.id_target_cur = 'A'
       AND tu.id_source_cur <> fu.id_target_cur;

    returns 25 rows.

ID_SOURCE_CUR   ID_TARGET_CUR   ID_SOURCE_CUR_1 ID_TARGET_CUR_1
--------------  --------------   --------------  -------------- 
        G               A               G               A
        G               A               K               A
        G               A               Q               A
        G               A               B               A
        G               A               Z               A
        K               A               G               A
        K               A               K               A
        K               A               Q               A
        K               A               B               A
        K               A               Z               A
        Q               A               G               A
        Q               A               K               A
        Q               A               Q               A
        Q               A               B               A
        Q               A               Z               A
        B               A               G               A
        B               A               K               A
        B               A               Q               A
        B               A               B               A
        B               A               Z               A
        Z               A               G               A
        Z               A               K               A
        Z               A               Q               A
        Z               A               B               A
        Z               A               Z               A  

なんで ?

4

2 に答える 2

5

2番目のクエリは異なり、WHERE句も異なります。最初WHEREは:

WHERE tu.id_target_cur = 'A'
       AND fu.id_source_cur = 'A'
       AND tu.id_source_cur <> fu.id_target_cur;

2番目は:

WHERE tu.id_target_cur = 'A'
       AND fu.id_target_cur = 'A' -- this line is different, it should be fu.id_source_cur = 'A'
       AND tu.id_source_cur <> fu.id_target_cur;

それらを変更すると、両方のクエリで結果がまったく同じになります。

于 2012-04-18T20:00:13.280 に答える
3

fu.id_source_cur = 'A'where句は異なります。fu.id_target_cur = 'A'

于 2012-04-18T20:00:17.737 に答える