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 :

Remplacer IN par LEFT OUTER JOIN


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut Remplacer IN par LEFT OUTER JOIN
    1and1 ne reconnait toujours pas les IN et les NOT IN.
    Il faut donc remplacer la requete imbriquée par un LEFT OUTTER JOIN.
    Cela fonctionne parfaitement,sauf pour cette requete que je n'arrive pas a transformer.

    Voici sa forme avec la requete imbriquée ( qui fonctionne ) :

    SELECT count(idjoueurs) as nbj
    FROM sow_joueurs
    WHERE idjoueurs IN (

    SELECT sow_joueurs.idjoueurs
    FROM sow_joueurs, sow_joueursquetesterminees
    WHERE sow_joueurs.idjoueurs = sow_joueursquetesterminees.idjoueurs
    AND xpjoueurs >=$xpjoueurs
    GROUP BY idjoueurs
    HAVING count( idquetes ) >=$nb
    )


    Si quelqu'un pouvait essayer de transformer cette requete, cela me rendrait grandement service.
    D'avance merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Avec quel SGBD, quelle version ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    ahh al1_24 ! !! toujours les meme qui viennent aider ! ( cf : http://www.developpez.net/forums/arc.../t-264593.html )

    C'est avec MySQL4.0 ...

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Je vois difficilement comment se passer de sous-requêtes à ce niveau là.
    Il ne te reste plus que la solution de passer par une table temporaire où tu stockeras les résultats de ta sous-requete.
    Et remplacer ton IN par un INNER JOIN, en étant sûr qu'il ne risque pas d'y avoir de doublons.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    J'avoue ne pas comprendre tout a fait la finalité de la requete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT count(sow_joueurs.idjoueurs)
    FROM sow_joueurs, sow_joueursquetesterminees
    WHERE sow_joueurs.idjoueurs = sow_joueursquetesterminees.idjoueurs
    AND xpjoueurs >=$xpjoueurs
    GROUP BY idjoueurs
    HAVING count( idquetes ) >=$nb
    n'est il pas suffisant pour la requete ?

    de toute facon, ce n'est pas 1&1 qui ne reconnait pas les IN ou les NOT IN, c'est la version de MySQL qui ne supporte pas les sous requetes.

    Bon courage

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    Effectivement ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(DISTINCT sow_joueurs.idjoueurs) as nbj
    FROM sow_joueurs LEFT JOIN sow_joueursquetesterminees ON
    sow_joueursquetesterminees.idjoueurs = sow_joueurs.idjoueurs
    WHERE  xpjoueurs >= $xpjoueurs
    HAVING count( idquetes ) >=$nb
    fonctionne , sauf que le resultat me donne le nombre de joueurs qui ont plus d'experience que $xpjoueurs ... le HAVING count( idquetes ) >=$nb n'est apparement pas pris en compte : /


    le resultat est le meme sans le HAVING count( idquetes ) >=$nb , comme quoi il n'est vrmt pas pris en compte ..

    quelqu'un sait pourquoi ? ;/

Discussions similaires

  1. Left outer join et division par zero
    Par chuckichucki dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/01/2011, 14h13
  2. [MySQL] left outer join et concaténation dans un tableau passe par if mais pas par else ?
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/04/2008, 15h09
  3. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07
  4. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17
  5. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08

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