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

MS SQL Server Discussion :

ou placer DISTINCT ?


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut ou placer DISTINCT ?
    Bonjour, j'ai un souci avec une requete. C'est une requete dans une requete parce que c'est une navigation par page (25 lignes de résultats par page dans mon exemple).

    un echo de ma requete donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select top 25 * from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where ( id_four) NOT IN ( 
    select top 0 id_four from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    order by code_four ) and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    order by code_four
    le requête fonctionne bien
    mon souci c'est qu'elle ressort les doublons
    je voulais utiliser distinct
    j'ai essayé de le placer à plusieurs endroits mais à chaque fois ca plante
    est-ce que vous savez comment utiliser DISTINCT dans ce genre de requete double ?

    merci bcp pour votre aide

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Une sous requête fera l'affaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT top 25 * FROM (
    select distinct * from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where ( id_four) NOT IN ( 
    select top 0 id_four from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    order by code_four ) and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    ) R
    order by code_four

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    oj, je teste tout de suite
    merci Laurent

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    ca plante avec le message :
    Warning: MS SQL message: Syntaxe incorrecte vers le mot clé 'order'. (severity 15) in d:\www\baccara\fournisseurs\fournisseurs_rech.php on line 436

    en même temps, je ne comprends pas pourquoi on met un disctinct dans la 1ere requete mais pas dans la 2eme (celle qui commence par top 0)


    je remets l'echo de la requete après avoir modifié comme tu disais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT top 25 * FROM ( 
    select distinct * from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1')
    left join fournisseurs_envir on four_fenv=id_four 
    where ( id_four) NOT IN ( 
    select top 0 id_four from fournisseurs
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' )
    order by code_four ) and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    ) order by code_four

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    C'est normale.
    En fait, tu avais oublié le renom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT top 25 * FROM ( 
    select distinct * from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where ( id_four) NOT IN ( 
    select top 0 id_four from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    order by code_four ) and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    )  T_RESULTAT
    order by code_four
    Et le tour est joué.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Le renom ?
    en effet, jamais entendu ce mot là
    quand j'ai vu le "R" dans ta requete, j'ai cru que c'était une faute de frappe !

    Honte à moi
    merci

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Et qu'est ce que ca te donne comme résultat ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Parfait, je vais marquer Résolu

    merci encore

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

Discussions similaires

  1. ou placer distinct (suite)
    Par seb92 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 02/12/2004, 13h57
  2. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 20h33
  3. Lier 2 bases distinctes
    Par seb.49 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/02/2004, 11h19
  4. tri obligatoire avec DISTINCT?
    Par Marseillais9 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 31/07/2003, 18h50
  5. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 15h58

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