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

Requêtes MySQL Discussion :

NOT EXISTS mysql 4.1 > 3.23


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Par défaut NOT EXISTS mysql 4.1 > 3.23
    Comment transformer la requete suivante dans un format compatible avec MySQL 3.23 ???
    - LEFT JOIN ???
    - AUTRE ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SELECT * FROM q_questions
    WHERE
    q_questions.ques_activ='OUI' AND
    NOT EXISTS
    (
    SELECT *
    FROM q_activites,q_reponses
    WHERE q_activites.act_id = q_reponses.act_id AND
          q_reponses.pers_id = 1 AND
          q_activites.ques_id = q_questions.ques_id
    )
    AND
    NOT EXISTS
    (
    SELECT *
    FROM q_ignore
    WHERE q_ignore.pers_id = 1 AND
          q_ignore.ques_id = q_questions.ques_id
    )
    ORDER BY rand()
    LIMIT 1
    merci d'avance aux pros de mysql....

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut Re: mysql 4.1 > 3.23
    Bonjour,

    Sauf erreur cette requête peut se traduire par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT * FROM q_questions
    WHERE
    q_questions.ques_activ='OUI' AND
    q_questions.ques_id NOT IN
    (
    SELECT q_activites.ques_id
    FROM q_activites,q_reponses
    WHERE q_activites.act_id = q_reponses.act_id AND
          q_reponses.pers_id = 1
    )
    AND
    q_questions.ques_id NOT IN
    (
    SELECT ques_id
    FROM q_ignore
    WHERE q_ignore.pers_id = 1
    )
    ORDER BY rand()
    LIMIT 1
    De là tu devrais pouvoir transformer ça en LEFT JOIN.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Par défaut
    merci, mais je ne trouve pas la bonne syntaxe avec LEFT JOIN

    Quelle est la différence entre mon NOT EXISTS
    et le NOT IN que tu proposes ?

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Le NOT IN cherche toutes les lignes qui ne sont pas dans un ensemble de lignes donné. Le NOT EXISTS cherche les lignes pour lesquelles il n'existe pas des lignes en relation dans un ensemble de lignes donné.
    Les deux sont en général substituables.

    Essaie ceci (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT * FROM q_questions
    LEFT JOIN (q_activites INNER JOIN q_reponses ON 
    (q_activites.act_id = q_reponses.act_id AND q_reponses.pers_id = 1))
    ON q_activites.ques_id = q_questions.ques_id
    LEFT JOIN q_ignore
    ON (q_questions.ques_id=q_ignore.ques_id AND q_ignore.pers_id = 1)
    WHERE q_questions.ques_activ='OUI'
    AND q_activites.ques_id IS NULL
    AND q_ignore.ques_id IS NULL
    ORDER BY rand()
    LIMIT 1

Discussions similaires

  1. [MySQL] Requête sur table de jointure avec not in ou not exists
    Par GueloSuperStar dans le forum Langage SQL
    Réponses: 12
    Dernier message: 08/03/2013, 15h01
  2. [MySQL] INSERT IF NOT EXISTS
    Par Iloyo dans le forum MySQL
    Réponses: 7
    Dernier message: 17/03/2010, 15h26
  3. mysql : not exist
    Par mcdelay dans le forum MySQL
    Réponses: 3
    Dernier message: 12/12/2008, 15h38
  4. Réponses: 1
    Dernier message: 12/11/2007, 16h43
  5. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26

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