私はクエリの結果に驚いて、誰かがそれを説明できると願っています。LEFT外部結合+ where句の予期しない結果
問合せは、一種の大きいので、私は重要な部分にそれを蒸留:
SELECT *
FROM A
INNER JOIN B ON A.id = B.id
LEFT JOIN C ON C.ID = B.ID
WHERE A.Dt = '2016-06-23'
AND (B.StatusCode=' ' OR C.Code <> 9)
私は私が私のwhere句でそれを持っているにもかかわらず6/23/16以外の日付を取得しています。私はそれは、左の結合されたテーブルと内部の結合されたテーブルの1つの式から、私のwhere節の列を結合することと関係していると思うが、以前はこれを経験したことがない。
UPDATE:
SELECT *
FROM CERT2.cube_mbbal_Daily_Balances BAL
INNER JOIN CERT.Dim_Account A ON A.AccountKey = BAL.AccountKey
LEFT JOIN CERT2.Dim_LoanAccount LA ON A.AccountKey = LA.AccountKey
WHERE
(A.AccountClassification IN ('Checking', 'Savings')
AND AccountStatus IN ('1', '3', '5', '6', '7'))
OR
(A.AccountClassification IN ('Time')
AND AccountStatus IN ('1', '5', '7'))
OR
(A.AccountClassification IN ('Loan')
AND (AccountStatus <> 'C' OR RiskCode <> 9))
AND BAL.DateOfFinancialMeasure = 20160623
が参加し、簡略化されたクエリの上にあなたが持っている – techspider
を参照してください。 WHERE句は、指定された日付以外の日付を返すことはできません。 –
@techspiderに同意すると、BまたはCのいずれかに1対多数が存在し、それが問題の原因であると思われます –