Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
965 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [ORACLE] problème avec "select in select" ou équivalent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ORACLE] problème avec "select in select" ou équivalent

n°2214159
Hermes le ​Messager
Breton Quiétiste
Posté le 20-12-2013 à 07:54:58  profilanswer
 

Bonjour à tous (ca fait un bail que j'ai pas posté ici :D )
 
J'ai un problème avec Oracle...
 
Exemple:
Deux tables
 
table_utilisateurs
 
numero_d_utilisateur
nom
prenom
adresse
 
table messages:
 
numero_message
utilisateur
message_content
date_message
 
Comment faire pour avoir le dernier message de TOUS les utilisateurs?
 
SELECT numero_d_utilisateur, nom, prenom, adresse,
 ( SELECT date_message FROM  table messages WHERE rownum = 1 ORDER BY date_message DESC )
FROM table_utilisateurs
 
Ca marche pas. :/
 
J'avoue que je sèche.
 
Merci!
 
 


---------------
Expert en expertises
mood
Publicité
Posté le 20-12-2013 à 07:54:58  profilanswer
 

n°2214267
lasnoufle
La seule et unique!
Posté le 20-12-2013 à 21:07:36  profilanswer
 

Je dirais:

SELECT tu.numero_d_utilisateur, tu.nom, tu.prenom, tu.adresse, tm.message_content
FROM table_utilisateurs tu
JOIN (SELECT utilisateur, MAX(date_message) AS date_dernier_message FROM table_messages GROUP BY utilisateur) dm
       ON dm.utilisateur = tu.utilisateur_id
JOIN table_messages tm ON tm.utilisateur = dm.utilisateur AND tm.date_message = dm.date_dernier_message

Remplaces JOIN par LEFT JOIN si tu veux avoir les gusses sans messages dans ton resultat.
 
Si tu as suffisament de donnees pour avoir des problemes de perf, un index sur table_messages(utilisateur, date_message) ne sera pas de trop (ou un truc dans le genre).
L'autre option etant d'ajouter un champ table_utilisateurs(num_dernier_message) et le maintenir histoire de pouvoir faire une jointure directe du meilleur gout.


---------------
C'était vraiment très intéressant.
n°2216272
gpl73
Posté le 16-01-2014 à 09:52:56  profilanswer
 

select * from  table_utilisateur as a inner join table_msg as b            
on a.id_user = b.id_user                              
where (a.id_user, b.date_msg) in (                    
SELECT a.id_user,                                    
max(date_msg) FROM table_utilisateur as a inner join table_msg as b on a.id_user = b.id_user  group by a.id_user)      
---- union si tu veux avoir les utilisateurs sans message--------
union                                                
(select * from  table_utilisateur as a exception join table_msg as b    
on a.id_user = b.id_user)          
order by 1
 
C'est un peu tordu.. mais ça marche bien :)                                


Message édité par gpl73 le 16-01-2014 à 09:53:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [ORACLE] problème avec "select in select" ou équivalent

 

Sujets relatifs
Problème boucle VBA avec vlookupProblème Positionement div
Problème avec fonction pow[Résolu] Problème envoi formulaire
Problème de connexions successives à MYSQLHelp Problème VBA: Seriescollection.name
Problème premier site flashProbleme vba
problème saisi chaine de caractèrePetit un problème avec structure
Plus de sujets relatifs à : [ORACLE] problème avec "select in select" ou équivalent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR