[MySql] Select sur jointure, tous enregs tables principale et date min table liée
Bonsoir,
Je suis empêtré dans une requête, et à force d'avoir la tête dedans, je ne vois plus la solution, qui doit pourtant être relativement simple (je pense).
Voici les cas :
- j'ai une table (SESSIONS) avec différentes données, des sessions. Chaque session possède un id, un libellé, et d'autres données sans intérêt.
- une autre table (DATES), qui contient 3 champs : id, id de la table des sessions (clé étrangère de la table SESSIONS), et une date.
- une SESSION peut être rattachée à 0 ou plusieurs dates.
Mon besoin : récupérer TOUTES les sessions, et pour chacune la date minimale (ou null, ou autre valeur si aucune date correspondante à cette session).
Pour info, voici le code de création des 2 tables, avec un jeu d'essai :
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
| CREATE TABLE IF NOT EXISTS `DATES` (
`Date_id` bigint(20) NOT NULL auto_increment,
`Date_SessionId` bigint(20) NOT NULL COMMENT 'Clé externe de la session à laquelle est rattrachée cette date',
`Date_Date` date NOT NULL,
PRIMARY KEY (`Date_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=69 ;
--
-- Contenu de la table `DATES`
--
INSERT INTO `DATES` (`Date_id`, `Date_SessionId`, `Date_Date`) VALUES
(66, 67, '2011-06-23'),
(68, 67, '2011-06-28'),
(62, 110, '2011-10-03'),
(67, 67, '2011-06-30');
-- --------------------------------------------------------
--
-- Structure de la table `SESSIONS`
--
CREATE TABLE IF NOT EXISTS `SESSIONS` (
`Session_id` bigint(20) NOT NULL auto_increment,
`Session_Libelle` varchar(255) NOT NULL,
PRIMARY KEY (`Session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=112 ;
--
-- Contenu de la table `SESSIONS`
--
INSERT INTO `SESSIONS` (`Session_id`, `Session_Libelle`) VALUES
(67, 'Libellé Session 1'),
(60, 'Libellé Session 2'),
(111, 'Libellé Session 3'); |
Sur cet exemple, je voudrais obtenir la liste des sessions (3), avec pour chaque la date la plus petite associée, ou null si aucune date associée :
Code:
1 2 3 4
|
67 Libellé Session 1 2011-06-23
60 Libellé Session 2 null
110 Libellé Session 3 2011-10-03 |
Je tourne en rond depuis hier, je n'avance plus.
une idée ?
Merci !
Olif.