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 :

[Select] Problème de multi rows


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 43
    Points
    43
    Par défaut [Select] Problème de multi rows
    Bonjour,

    je me cogne à une requête qui parait assez simple mais que je n'arrive pas à réaliser.

    J'ai 2 tables :

    Product
    --------
    id_product = PK
    ...

    Package_Language
    ------------------
    id_product
    id_language

    pk = id_product + id_language

    Ma requete est tout simplement de sortir la liste des id_product
    qui sont en FRA et en NLD.
    Une autre ceux qui ont FRA et PAS NLD
    Et une troisième, ceux qui ont NLD et PAS FRA


    J'ai essayé de faire ceci :

    FRA + NLD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct p.id_product
    from package_language t1
    inner join package_language t2 with(no lock) on t1.id_product = t2.id_product
    inner join product p with(nolock) on p.id_product = t1.id_product
    where t1.id_language = 'FRA'
    and t2.id_language = 'NLD' 
    and p.id_product_type = 1
    =>2281 id_product FRA + NLD

    FRA et PAS NLD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct p.id_product
    from package_language t1
    inner join package_language t2 with(no lock) on t1.id_product = t2.id_product
    inner join product p with(nolock) on p.id_product = t1.id_product
    where t1.id_language = 'FRA'
    and t2.id_anguage <> 'NLD' 
    and p.id_product_type = 1
    =>13650 id_product FRA

    NLD et PAS FRA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct p.id_product
    from package_language t1
    inner join package_language t2 with(no lock) on t1.id_product = t2.id_product
    inner join product p with(nolock) on p.id_product = t1.id_product
    where t1.id_language <>'FRA'
    and t2.id_anguage = 'NLD' 
    and p.id_product_type = 1
    =>8171 id_product NLD

    Je sais que c'est faux, soit d'un point de vue logique, soit d'un point de vue syntaxique car si je prends le total d'id_product différents dans la table package_language pour un id_product_type = 1 je trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct t1.id_product 
    from package_language t1
    inner join package_language t2 with(nolock) on t1.id_product = t2.id_product
    inner join product p with(nolock) on p.id_product = t1.id_product
    where p.id_product_type= 1
    Résultat : 19651 id_product différents

    Donc FRA (sans NLD) + NLD (sans FRA) + FRA/NLD = 24102 ALors que je n'ai que 19 651 id_product différents dans ma table ...
    Donc c'est clair que mes requêtes ne fonctionnent pas

    Pouvez vous éclaircir ma lanterne svp?
    Merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Vu rapidement la 2ème est fausse il faut un NOT EXISTS ou un NOT IN pour la condition :
    ...et PAS NLD

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 43
    Points
    43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT p.id_product
    FROM package_language t1
    INNER JOIN package_language t2 WITH(no LOCK) ON t1.id_product = t2.id_product
    INNER JOIN product p WITH(nolock) ON p.id_product = t1.id_product
    WHERE t1.id_language = 'FRA'
    AND p.id_product_type = 1
    AND not exists (select * from package_language where id_language = 'NLD' and id_priduct = t1.id_product
    Ca à l'air d'être bon !!
    Merci

    je look le total et si ok je marque le sujet résolu, thx

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Vous avez compris pourquoi ?
    Vous avez corrigé la 3ème requête qui nécessite elle aussi un NOT EXISTS ou NOT IN ?

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

Discussions similaires

  1. [Struts] html:select problème dans l'affichage
    Par n00noors dans le forum Struts 1
    Réponses: 17
    Dernier message: 16/05/2006, 10h54
  2. Problème Requete Multi Jointure + Like
    Par thefutureisnow dans le forum Langage SQL
    Réponses: 27
    Dernier message: 06/01/2006, 15h50
  3. Problème Requete Multi Jointure + Like
    Par thefutureisnow dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/01/2006, 19h39
  4. Requête SELECT problème dans les résultats trouvés ...
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/10/2005, 12h46
  5. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05

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