2014-03-06 75 views
0
SELECT * 
FROM PERSONNE 
WHERE PERSONNE.NO_PERSONNE = GENEALOGIE.NO_PERSONNE 
    AND GENEALOGIE.TYPE_EVENEMENT_GEN = 'Baptême' 
    AND GENEALOGIE.LIEU_EVENEMENT_GEN != 'Ste-Lubie' 
    AND GENEALOGIE.TYPE_EVENEMENT_GEN = 'Mariage' 
    AND GENEALOGIE.LIEU_EVENEMENT_GEN = 'Ste-Lubie'; 

我很想做那樣的事情。SQL oracle where clause

選擇Ste-Lubie的人在哪裏結婚,但不是Ste-Lubie的「Baptême」。

+0

'GENEALOGIE.TYPE_EVENEMENT_GEN ='Baptême'AND GENEALOGIE.TYPE_EVENEMENT_GEN ='Mariage'' ???你想實現什麼目標?您能否向我們展示一些表格中的示例數據和所需的輸出? –

+0

除'Baptême'和'Mariage'之外是否還有'TYPE_EVENEMENT_GEN'的值? –

+0

顯示您的表格結構。 –

回答

1

請嘗試此解決方案:

SELECT * 
FROM PERSONNE 
    JOIN GENEALOGIE ON PERSONNE.NO_PERSONNE = GENEALOGIE.NO_PERSONNE 
    LEFT JOIN GENEALOGIE GEN_NOT ON (PERSONNE.NO_PERSONNE = GENEALOGIE.NO_PERSONNE AND GENEALOGIE.TYPE_EVENEMENT_GEN = 'Baptême' AND GENEALOGIE.LIEU_EVENEMENT_GEN = 'Ste-Lubie') 
WHERE 
    GENEALOGIE.TYPE_EVENEMENT_GEN = 'Mariage' 
    AND GENEALOGIE.LIEU_EVENEMENT_GEN = 'Ste-Lubie' 
    AND GEN_NOT.NO_PERSONNE IS NULL 

了一些修改,要工作,我猜...

0

嘗試......

SELECT T1.*,T2.* 
FROM PERSONNE T1 
INNER JOIN GENEALOGIE T2 
ON T1.NO_PERSONNE = T2.NO_PERSONNE 
WHERE T2.TYPE_EVENEMENT_GEN = 'Baptême' 
AND T2.LIEU_EVENEMENT_GEN != 'Ste-Lubie' 
AND T2.TYPE_EVENEMENT_GEN = 'Mariage' 
AND T2.LIEU_EVENEMENT_GEN = 'Ste-Lubie'; 
1
SELECT P.* 
FROM PERSONNE P,GENEALOGIE G 
WHERE P.NO_PERSONNE = G.NO_PERSONNE 
    AND G.TYPE_EVENEMENT_GEN = 'Mariage' 
    AND G.LIEU_EVENEMENT_GEN = 'Ste-Lubie' 
    AND NOT EXISTS 
    (SELECT 'X' FROM GENEALOGIE G1 
    WHERE P.NO_PERSONNE = G1.NO_PERSONNE 
     AND G1.TYPE_EVENEMENT_GEN = 'Baptême' 
     AND G1.LIEU_EVENEMENT_GEN = 'Ste-Lubie') 

OR

SELECT P.* 
FROM PERSONNE P 
WHERE P.NO_PERSONNE IN 
    (SELECT NO_PERSONNE FROM GENEALOGIE G1 
    WHERE G1.TYPE_EVENEMENT_GEN = 'Mariage' 
     AND G1.LIEU_EVENEMENT_GEN = 'Ste-Lubie' 
    MINUS 
    SELECT NO_PERSONNE FROM GENEALOGIE G1 
    WHERE G1.TYPE_EVENEMENT_GEN = 'Baptême' 
     AND G1.LIEU_EVENEMENT_GEN = 'Ste-Lubie')