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 :

Problème de requête avec une condition IN


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Points : 97
    Points
    97
    Par défaut Problème de requête avec une condition IN
    Bonjour,
    Je voudrais exécuter cette simple requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
    from table1
    where code in (select code from table2)
    a priori rien de compliquer sauf que la requête ne ramène aucun résultat, ci-dessous le contenu des tables:
    TABLE1
    CODE LIB
    -----------------------
    '01','02' TESTS1
    '03','04' TESTS2

    TABLE2
    CODE
    --------
    '03','04'
    si vous comprenez pourquoi?
    a priori je pense quand même que cela viendrait des quillemets qui sont stockés en base.

    Merci.
    En Informatique, tout est possible... mais... ce n'est pas toujours évident!

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je ne comprends pas pourquoi effectivemment ?

    Voici des tests faits sous Oracle 8i : ça fonctionne comme tu souhaites :

    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
    23
    24
    25
    26
    27
    SQL> create table table1 (code varchar2 (10), lib varchar2 (10));
     
    Table créée.
     
    SQL> create table table2 (code varchar2 (10));
     
    Table créée.
     
    SQL> insert into table1 (code, lib) values ('''01'',''02''', 'TESTS1');
     
    1 ligne créée.
     
    SQL> insert into table1 (code, lib) values ('''03'',''04''', 'TESTS2');
     
    1 ligne créée.
     
    SQL> insert into table2 (code)  values ('''03'',''04''');
     
    1 ligne créée.
     
    SQL> select *
      2  from table1
      3  where code in (select code from table2);
     
    CODE       LIB
    ---------- ----------
    '03','04'  TESTS2
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Points : 97
    Points
    97
    Par défaut
    ayant moi même une formation Oracle ça me semblait logique, or sous SQLServer ce n'est pas le cas! grrrrr.....
    En Informatique, tout est possible... mais... ce n'est pas toujours évident!

  4. #4
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Points : 97
    Points
    97
    Par défaut
    Voilà donc mes tests :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    drop table #table1
    drop table #table2
     
    create table #table1 (code char (2), lib varchar (10));
    create table #table2 (code varchar (255));
     
    insert into #table1 (code, lib) values ('01', 'TESTS1');
    insert into #table1 (code, lib) values ('02', 'TESTS2');
    insert into #table1 (code, lib) values ('03', 'TESTS3');
    insert into #table2 (code)  values ('''01'',''02''');
     
    select * from #table1
    code lib        
    ---- ---------- 
    01   TESTS1
    02   TESTS2
    03   TESTS3
     
    (3 ligne(s) affectée(s))
     
    select * from #table2
    code                                                                                                                                                                                                                                                            
    --------- 
    '01','02'
     
    (1 ligne(s) affectée(s))
     
    select * from #table1
    where code in (select replace(code, '''', '') from #table2)
    code lib        
    ---- ---------- 
     
    (0 ligne(s) affectée(s))
    En Informatique, tout est possible... mais... ce n'est pas toujours évident!

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye (il n'y a qu'une ligne dans #table2, sinon, laquelle choisir ???) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM #table1 a CROS JOIN #table2 b
    WHERE b.code like '%''' +a.code + '''%'
    Je ne sais pas si la syntaxe CROSS JOIN est supportée par ton moteur, sinon, une simple virgule suffit.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Points : 97
    Points
    97
    Par défaut
    Effectivement ça fonctionne!
    Merci beaucoup!
    En Informatique, tout est possible... mais... ce n'est pas toujours évident!

Discussions similaires

  1. [AC-2007] Incrémenter dans une requête avec une condition
    Par neiluj26 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 02/11/2012, 11h38
  2. Requête avec une condition, est-ce possible ?
    Par le_chomeur dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2010, 16h10
  3. [PDO] Générer une requête avec une condition IN
    Par comode dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/05/2009, 22h17
  4. Problème de requête avec une date
    Par ghnawfal dans le forum SQL
    Réponses: 6
    Dernier message: 18/09/2008, 14h23
  5. Problème de requête avec une clause IN avec les Paramètres
    Par arilanto dans le forum Accès aux données
    Réponses: 1
    Dernier message: 03/04/2007, 14h35

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