IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Jointure entre 2 tables


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 749
    Points : 345
    Points
    345
    Par défaut Jointure entre 2 tables
    Bonjour
    J'ai deux tables SQL
    ligne (id, libellé, num_course)
    validite_course(num_course, valide, date_debut, date_fin)
    La clonne validite_course.valide peut être à OUI ou NON, Si c'est à OUI il faudra voir si la date système est comprise entre date_debut et date_fin

    Ce que je cherche à écrire c'est une requete qui m'affiche les ligne valides (donc dont le num_course existe dans la table validite_course) AINSI que les lignes dont num_course n'existe PAS dans la table validite_course

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT id
    FROM ligne L, vailidite_course VC
    WHERE ( L.num_course = VC.num_course
       AND valide = 'OUI'
       AND sysdate() BETWEEN date_debut AND date_fin
              )
      OR L.num_course <> VC.num_course
    ça donne bien un bon résultat mais la requete est trop lente car j'ai des milliers d'enregistrements dans la table ligne et quelques 2000 enreg dans validite_course
    Y-a-t-il une possibilité d'optimisation ?
    Merci
    PS : j'utilise MySQL 4, je ne peux donc pas utliser les requetes imbriquées
    '...parfois l'informatique peut vous rendre fou...'

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Es tu sure de ta requete actuelle ? Pas de ligne en doubles dans la réponses ?
    En tout les cas la solution à ton probleme semble être le "OUTER JOIN", la jointure externe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id
    FROM ligne L LEFT OUTER JOIN  vailidite_course VC ON L.num_course=VC.num_course
    WHERE valide = 'OUI'
       AND sysdate() BETWEEN date_debut AND date_fin
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si je puis me permettre, la requête de ze_key ne ramènera que les lignes qui existent dans validité_course, pour obtenir les autres il faut mettre toutes les conditions dans le JOIN et non dans le WHERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id 
    FROM ligne L LEFT OUTER JOIN  validite_course VC ON L.num_course=VC.num_course 
                                                     AND valide = 'OUI' 
                                                     AND sysdate() BETWEEN date_debut AND date_fin
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 749
    Points : 345
    Points
    345
    Par défaut
    Médiat >
    J'ai appliqué la requete de Ze Key et elle marche bien
    '...parfois l'informatique peut vous rendre fou...'

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    C'est sans doute que je n'ai pas compris la question, il me semblait que tu voulais les lignes de la table Ligne qui ne sont pas dans la table validite_course
    (AINSI que les lignes dont num_course n'existe PAS dans la table validite_course)
    or une ligne qui n'est pas dans validite_course ne peut pas avoir valide='OUI' puisque valide est dans validite_course justement.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  2. Jointure entre 3 tables
    Par zigune dans le forum Langage SQL
    Réponses: 9
    Dernier message: 15/11/2004, 16h04
  3. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50
  4. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03
  5. Jointure entre 2 tables et OR
    Par PyRoFlo dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/02/2004, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo