SQL oracle where子句

时间:2014-03-06 04:39:55

标签: sql oracle

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';

我很想做那样的事。

选择这个人在Ste-Lubie结婚的地方,而不是Ste-Lubie的'Baptême'。

3 个答案:

答案 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

一些修改,我认为应该工作......

答案 1 :(得分: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')

答案 2 :(得分: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';