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 :

instruction select dans une table ?


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
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut instruction select dans une table ?
    Bonjour,

    je cherche un faire un select (oracle 10g) dans une table mais je ne sais pas comment faire ?

    exemple :

    table X

    col1 | col2
    A | 1
    A | 1
    A | 2
    B | 3
    B | 4
    B | 3
    C | 2
    C | 2
    C | 2

    Je veux savoir dans la table X.col 1 les enregistrements qui n'ont pas dans col 2 identique.

    select "????" le résultat : A et B

    merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 55
    Par défaut
    Bonjour,

    En relisant le message, j'ai mieux compris.
    Bonne journée.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Bonjour.

    Si je fais une auto-jointure interne, j'obtiens les lignes qui ont quelque chose en commun.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT X1.Col1
    FROM X AS X1
    INNER JOIN X AS X2 ON X1.Col2 = X2.Col2
    Ca devrait donner comme résultat A et C puisque 2 est commun à A et à C.

    Si je fais une condition de jointure en inégalité, peut-être que j'obtiendrai ce que tu cherches ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT X1.Col1
    FROM X AS X1
    INNER JOIN X AS X2 ON X1.Col2 <> X2.Col2
    Point de départ à creuser et à adapter à ton SGBD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Je ne suis pas sûr d'avoir compris exactement ce que tu veux... mais si tu dois avoir A et B, c'est que tu cherches les col1 pour lesquelles il existe au omins 2 valeurs distinctes dans col2 ?

    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
     
    with t as (
    SELECT 	'A' as col1 	, 		1	as col2 FROM DUAL UNION ALL
    SELECT 	'A' 	, 		1	FROM DUAL UNION ALL
    SELECT 	'A' 	, 		2	FROM DUAL UNION ALL
    SELECT 	'B' 	, 		3	FROM DUAL UNION ALL
    SELECT 	'B' 	, 		4	FROM DUAL UNION ALL
    SELECT 	'B' 	, 		3	FROM DUAL UNION ALL
    SELECT 	'C' 	, 		2	FROM DUAL UNION ALL
    SELECT 	'C' 	, 		2	FROM DUAL UNION ALL
    SELECT 	'C' 	, 		2	FROM DUAL
    )
    select col1 
    from t
    group by col1
    having count(distinct col2) > 1
    Résultat :
    COL1
    ----
    A
    B

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut
    Merci pour les réponses.

    J'explique mieux mon problème :

    Je veux savoir dans la table X, pour une valeur de la col1 si toutes les valeurs de la col2 sont identiques.

    Dans mon exemple seul C de la col 1 a des enregistrement identique dans col2 (ici 2).

    Moi je veux avoir comme résultat le contraire ici : A et B (pour A et B les valeurs de col2 ne sont pas identique).

    NB : ma table a presque 1 million de ligne .

    Merci.

  6. #6
    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
    Il y a une plusieurs solutions a votre probleme,

    Celle ci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select col1
     from X 
    group by col1
    having 
    (sum(col2) / max(col2)) <> count(1)
    A tester et a adapter
    Bon courage

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut
    ca ne marche pas .

    Petite précision ma col2 c'est du varchar2.

    merci comme même.

  8. #8
    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
    Petite précision ma col2 c'est du varchar2.
    C'etait pas flagrant dans votre exemple

  9. #9
    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
    Voici donc une seconde solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select b.col1 from (
    select a.col1,a.col2,count(1) from X a  group by a.col1,a.col2) b
    group by b.col1 having count(1)<>1
    bon courage

  10. #10
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Ben

    Dans mon exemple seul C de la col 1 a des enregistrement identique dans col2 (ici 2).
    Moi je veux avoir comme résultat le contraire ici : A et B (pour A et B les valeurs de col2 ne sont pas identique).
    Le contraire, c'est donc : il y a au moins deux valeurs différentes.

    Je réitère ma proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT col1 
    FROM t
    GROUP BY col1
    HAVING count(DISTINCT col2) > 1

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut
    Merci encore pour votre participation.

    je ne suis plus au travail la.

    Je teste la dernière soluce de Pacman, ca me semble cohérent.

    Je vous tiens au courant demain.

    Merci.

    ++

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut
    Merci, cela fonctionne.



    ++

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

Discussions similaires

  1. [A-03] Selection dans une table
    Par michael1971 dans le forum IHM
    Réponses: 9
    Dernier message: 01/11/2008, 11h38
  2. Optimisation "GROS" SELECT dans une table partitionnée
    Par jfmerveille dans le forum Sybase
    Réponses: 3
    Dernier message: 14/06/2008, 13h22
  3. Mettre un select dans une table
    Par bertlef dans le forum JDeveloper
    Réponses: 1
    Dernier message: 12/09/2006, 17h04
  4. [SQL]Select dans une table d'une autre base de données
    Par Didouille dans le forum Access
    Réponses: 3
    Dernier message: 21/12/2005, 09h00
  5. [MySQL] Affichage de valeurs par selection dans une table
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 16/12/2005, 17h04

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