Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2011, 16h28   #1
Invité de passage
 
Inscription : avril 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 16
Points : 1
Points : 1
Par défaut Like et liste de valeurs

Bonjour,

J'ai dans une requête les lignes suivantes dans la clause where :

Code :
1
2
3
 
tab1.champ1 IN ('xxx', 'yyy', 'zzz') 
AND tab2.champ2 LIKE ('%xxx%','%yyy%','%zzz%')
dans la première ligne, c'est simple je veux que mon champ1 soit égale à une des valeurs de la liste.
Dans la 2ème ligne, je veux que champ2 contienne une des valeurs de la liste.
Les 2 listes de valeurs sont identiques. Sauf que pour la 2ème ligne, je mets des % et c'est pour ça que j'utilise le like.

Ensuite je me demande, est ce que c'est possible de reprendre la valeur sélectionné dans la 1ère ligne et de l'utiliser dans la deuxième ligne ?

Est-ce que vous pourriez m'aider à écrire de façon correcte et optimale ma requête?

Je précise que ma liste de valeurs est trés grande. Par conséquent est-ce qu'il n'y aurait pas meilleur moyen que d'écrire par exemple :

Code :
WHERE tab2.champ2 LIKE %xxx% OR tab2.champ2 LIKE %yyy% OR tab2.champ2 LIKE %zzz%
Merci d'avance pour votre aide
corro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 17h01   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
Tu peux aussi utiliser quelque chose du genre :

Code :
WHERE REGEXP_LIKE ( tab2.champ2,'xxx|yyy|zzz')
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 17h43   #3
Invité de passage
 
Inscription : avril 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 16
Points : 1
Points : 1
Bonjour,

Merci pour votre réponse. Mais cela ne fonctionne pas. Il semble qu'il y ait une erreur dans cette ligne.
corro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 23h34   #4
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
Demo

Code :
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
SQL> CREATE TABLE t (c varchar(20));
 
TABLE created.
 
SQL> INSERT INTO t VALUES ('xxx');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('yyy');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('zzz');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('123xxx');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('123yyy');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('123zzz');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('123xxx123');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('123yyy123');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('123zzz123');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('xxx123');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('yyy123');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('zzz123');
 
1 row created.
 
SQL> SELECT * FROM t WHERE regexp_like (c,'xxx|yyy|zzz');
 
C
--------------------
xxx
yyy
zzz
123xxx
123yyy
123zzz
123xxx123
123yyy123
123zzz123
xxx123
yyy123
zzz123
 
12 rows selected.
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 15h06   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Regexp c'est à partir de la 10g

si la deuxième ligne de la requête est exactement la première ligne, c'est simple :
Code :
1
2
tab1.champ1 IN ('xxx', 'yyy', 'zzz') 
AND tab2.champ2 LIKE '%'|| tab1.champ1 ||'%'
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 19/12/2011, 17h22   #6
Invité de passage
 
Inscription : avril 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 16
Points : 1
Points : 1
Bonjour,

Merci pour votre dernière réponse. Cela marche beaucoup mieux.
corro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h52.


 
 
 
 
Partenaires

Hébergement Web