なぜ次のことが起こるのかを理解しようとしています(以下のコード例)。
-- Returns 1,000
SELECT COUNT(*)
FROM TABLE_ONE t1
WHERE t1.FIELD_ONE = 'Hello';
-- Returns 1,000
SELECT COUNT(*)
FROM TABLE_ONE t1
LEFT OUTER JOIN TABLE_TWO t2 ON t2.TABLE_ONE_ID = t1.ID
WHERE t1.FIELD_ONE = 'Hello'
AND t2.FIELD_TWO = 'Goodbye';
-- Returns 83,500
SELECT COUNT(*)
FROM TABLE_ONE t1
LEFT OUTER JOIN TABLE_TWO t2 ON (t2.TABLE_ONE_ID = t1.ID AND t2.FIELD_TWO = 'Goodbye')
WHERE t1.FIELD_ONE = 'Hello';
JOIN
左外部結合では、右の値が見つからない場合でも常に左の値が含まれることを理解しています。ただし、句に条件を追加すると、 JOIN
.
たとえば、TABLE_ONE からのエントリ A がある場合、2 つの条件を満たす TABLE_TWO 値を探します。見つからない場合は、空白になります。しかし、そのエントリ A は結果セットに 1 回しか表示されません。そのため、元の TABLE_ONE クエリに実際にあるものよりも多くの結果が得られる理由がわかりません。
アップデート
私が理解しようとしていることをもっと説明するために。結果のクエリ (を使用しないCOUNT
) は、次のような結果になります。
Table_One_Name Table_Two_Value
+++++++++++++++++++++++++++++++++++
Entry A Goodbye
Entry A
Entry A
Entry A
Entry B Goodbye
Entry B
JOIN
2 つの条件が満たされない場合に行が追加される理由がわかりません。