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