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 31/01/2008, 11h16   #1
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 669
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 50
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 669
Points : 840
Points : 840
Par défaut Select Distinct avec image (Version 10G)

Bonjour à tous,

J'ai une requête du style
Code :
1
2
3
4
SELECT a.champ1,b.champ2 
FROM table1 a
JOIN table2 b ON a.champ1=b.champ1
GROUP BY a.champ1,b.champ2
champ1 est un int, champ2 est un blob (pas un LongRows)

Oracle ne veut pas des DISTINCT sur les blob (ce qui est compréhensible)

j'ai donc écris

Code :
1
2
3
SELECT * FROM (SELECT a.champ1 
FROM table1 a GROUP BY a.champ1) frs
JOIN (SELECT b.champ1,b.champ2 FROM table2 b) frt ON frs.champ1=frt.champ1
j'ai donc mon distinct sur la table a et ma jointure sur b fonctionne, donc le résultat est bon

seulement je retourne 2 fois le champ1
donc je fais

Code :
1
2
3
SELECT ch1,ch3 FROM (SELECT a.champ1 AS ch1,b.champ1 AS ch2,b.champ2 AS ch3   FROM (SELECT a.champ1 
FROM table1 a GROUP BY a.champ1) frs
JOIN (SELECT b.champ1,b.champ2 FROM table2 b) frt ON frs.champ1=frt.champ1)
la tout est OK mais c'est pas beau.

quelqu'un connaitrait-il une astuce pour rendre la requête plus "propre"

merci
__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 10h57   #2
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Une autre possibilité serait:
Code :
1
2
3
4
5
6
7
SELECT b.champ1, b.champ2
FROM table2 b
WHERE b.champ1 IN
(
  SELECT champ1
  FROM table1 a
)
Je ne vois pas exactement l'intérêt de GROUP BY dans votre cas! Sauf garantir l'unicité du résultat mais justement, dans table2, le couple champ1 et champ2 est il unique?
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 12h01   #3
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 669
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 50
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 669
Points : 840
Points : 840
merci,

en fait
dans table1 =>champ1 est l'id article, champ2 est un libellé (uniques)
dans table2 =>champ1 est l'id article, champ2 est un code barre, (non unique :dépend du fournisseur, la clé est id_article,code barre, id fournisseur,pays)

donc , vous avez raison,
Code :
1
2
3
4
5
6
7
8
SELECT b.champ1, b.champ2
FROM table2 b
WHERE b.champ1 IN
(
  SELECT champ1
  FROM table1 a
)
GROUP BY b.champ1, b.champ2
irait très bien.

__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 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 18h16.


 
 
 
 
Partenaires

Hébergement Web