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.

  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 : 51

    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

  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.....

  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))

  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.

  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!

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