Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 14/12/2006, 09h42   #1
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2002
Messages : 237
Points : 151
Points : 151
Par défaut Rassembler plusieurs colonnes en liste dans un select

Bonjour,

Je souhaiterai rassembler plusieurs colonnes en une seule liste dans un select.

Le pourquoi est que je voudrais faire un

Code :
SELECT * FROM table1 WHERE id IN (SELECT id1, id2, id3 FROM table2)
Mais bien sûr, il me dit qu'il y a trop de valeur (3 colonnes pour une) et je souhaiterai savoir s'il existe une méthode pour rassembler les valeurs de ces 3 ensembles dans un seul ?

En vous remerciant d'avance.

Cordialement
Boutss

Version BDD -> Oracle9i
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 10h07   #2
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Code :
SELECT * FROM table1 T1 WHERE EXISTS (SELECT 1 FROM TABLE T2 WHERE T1.id=T2.ID1 OR T1.id=T2.ID2 OR T1.ID=T3.OD3)
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 10h42   #3
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2002
Messages : 237
Points : 151
Points : 151
Merci nuke_y,

Mais en fait c'est cette façon, qui fonctionne, que je ne veux pas utiliser car elle rend beaucoup trop lourde la requête car pour chaque élément de la table T1 on va aller scanner la table T2.

Alors je voudrais récupérer les données de la table T2 une fois pour toute et ensuite seulement passer le filtre.

Merci
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h37   #4
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2002
Messages : 237
Points : 151
Points : 151
Par défaut Union all

Bon une solution pas très propre mais qui fonctionne est UNION ALL :

Code :
1
2
3
4
5
SELECT DISTINCT ID1 FROM table2 WHERE <clause>
Union ALL
SELECT ID2 FROM table2 WHERE <clause>
Union ALL
SELECT ID3 FROM table2 WHERE <clause>
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 19h09   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Tu devrais comparer ta requête avec celle de nuke_y (regarde les consistent_gets en mode "set autotrace on"), car contrairement à toi, je ne pense pas du tout qu'elle soit moins couteuse...
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 19h16   #6
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Ouaih rémi, mais dès qu'on parle de EXISTS tu n'es plus objectif
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 21h17   #7
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Citation:
Envoyé par nuke_y
Ouaih rémi, mais dès qu'on parle de EXISTS tu n'es plus objectif
c'est clair!

remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 22h16   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 62
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 62
Points : 14
Points : 14
perso je ferai un peu comme bouts
SELECT * FROM table1 a,
(SELECT ID1 id FROM table2 WHERE <clause>
Union
SELECT ID2 FROM table2 WHERE <clause>
Union
SELECT ID3 FROM table2 WHERE <clause>) b
WHERE a.id=b.id

mais bon faut voir la masse des donnees etc, si ca ne retourne pas trop le exists devrait mieux s'en sortir
ukanoldai est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h53.


 
 
 
 
Partenaires

Hébergement Web