2012-02-29 72 views
0

我該如何做一個選擇:選擇存在於我的表中的所有proposta_id,稱爲San_Proposta和存在於我的表中的所有proposta_id San_Negocio當San_Negocio中的這個proposta_id具有列ValidaCaptacao = 0 AND ValidaVenda = 1或列ValidaVenda = 0 AND ValidaCaptacao = 1並且San_Negocio中的Proposta_Id列不能爲NULL?我該如何做一個左外部連接select

我不知道是否必須使用LEFT OUTER JOIN,但按照我的嘗試,這不能正常工作,因爲San_Negocio.Proposta_Id中不存在San_Proposta.Proposta_Id中的一些數據,但是此數據不會出現。

SELECT San_Proposta.Proposta_Id 
    FROM San_Proposta 
    LEFT OUTER JOIN San_Negocio 
    ON San_Proposta.Proposta_Id = San_Negocio.Proposta_Id 
    WHERE San_Negocio.Proposta_Id IS NOT NULL 
    AND (San_Negocio.ValidaCaptacao = 1 AND San_Negocio.ValidaVenda = 0) 
    OR (San_Negocio.ValidaCaptacao = 0 AND San_Negocio.ValidaVenda = 1) 
+0

只是爲了澄清 - Proposta_Id可以在任一臺或兩個正確的存在嗎?在這個問題中我沒有看到Proposta_Id必須至少存在於San_Proposta表中,如果它存在的話。如我錯了請糾正我。 – 2012-02-29 20:53:41

+0

San_Negocio.Proposta_Id存在於San_Proposta中,但San_Negocio中僅存在一些San_Proposta.Proposta_Id。 – 2012-02-29 20:59:32

回答

4

當您測試從左側列連接表的WHERE子句中,你的力量,加入表現得好像它是一個INNER JOIN。相反,使這些測試成爲連接條件的一部分。您還需要刪除WHERE San_Negocio.Proposta_Id IS NOT NULL,因爲這也會導致INNER JOIN。

SELECT San_Proposta.Proposta_Id 
    FROM San_Proposta 
     LEFT OUTER JOIN San_Negocio 
      ON San_Proposta.Proposta_Id = San_Negocio.Proposta_Id 
       AND (San_Negocio.ValidaCaptacao = 1 AND San_Negocio.ValidaVenda = 0) 
       OR (San_Negocio.ValidaCaptacao = 0 AND San_Negocio.ValidaVenda = 1) 
+0

+1一個很好的解釋。 – 2012-02-29 20:45:01

+0

但我現在遇到了問題。 San_Negocio.ValidaCaptacao無法擁有San_Negocio.ValidaVenda的相同價值。使用此查詢,返回具有相同值的此列(ValidaCaptacao和ValidaVenda)的一些數據。我如何才能返回ValidaVenda與ValidaCaptacao不同的數據? – 2012-02-29 20:58:05

+0

@Lucas_Santos:你看到的是什麼樣的價值? – 2012-02-29 21:05:33

-1
SELECT San_Proposta.Proposta_Id 
FROM San_Proposta 
INNER JOIN San_Negocio 
ON San_Proposta.Proposta_Id = San_Negocio.Proposta_Id 
WHERE (San_Negocio.ValidaCaptacao = 1 AND San_Negocio.ValidaVenda = 0) 
OR (San_Negocio.ValidaCaptacao = 0 AND San_Negocio.ValidaVenda = 1)