problème avec "select in select" ou équivalent [ORACLE] - SQL/NoSQL - Programmation
Marsh Posté le 20-12-2013 à 21:07:36
Je dirais:
SELECT tu.numero_d_utilisateur, tu.nom, tu.prenom, tu.adresse, tm.message_content |
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.
Marsh Posté le 16-01-2014 à 09:52:56
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
Marsh Posté le 20-12-2013 à 07:54:58
Bonjour à tous (ca fait un bail que j'ai pas posté ici )
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