MySQL SELECT LEFT JOIN etc.
Doc
- http://dev.mysql.com/doc/refman/5.0/fr/left-join-optimization.html|7.2.9. Comment MySQL optimise les clauses LEFT JOIN et RIGHT JOIN
- http://www.trucsweb.com/asp/trucs.asp?no=104&type=7|Jointures et relations INNER, LEFT, RIGHT, UNION…
Exemple
Créer deux tables:
CREATE TABLE IF NOT EXISTS `a` ( `id` varchar(3) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `a` -- INSERT INTO `a` (`id`) VALUES ('a'), ('b'), ('c'), ('d'); CREATE TABLE IF NOT EXISTS `b` ( `a_id` varchar(3) NOT NULL, `b` tinyint(4) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `b` -- INSERT INTO `b` (`a_id`, `b`) VALUES ('a', 1), ('a', 2), ('b', 1), ('b', 3);
Si on fait:
SELECT * FROM `a` , `b` WHERE a.id = b.a_id LIMIT 0 , 30
mysql retourne
a a 1 a a 2 b b 1 b b 3
on n'a donc pas les enregistrements c
pour les avoir:
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id
renvoie
a a 1 a a 2 b b 1 b b 3 c NULL NULL d NULL NULL
Pour nettoyer
SELECT b.a_id, b.b FROM a LEFT JOIN b ON a.id = b.a_id LIMIT 0 , 30
renvoie
a 1 a 2 b 1 b 3 NULL NULL NULL NULL