我试图理解为什么会发生以下情况(下面的示例代码)。
-- 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 只会在结果集中出现一次。所以我很困惑为什么我得到的结果比原始 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 个条件时添加行。