VERSION J'utilise la version du serveur: 5.1.36-community-log MySQL Community Server (GPL)Pourquoi est-ce que je peux choisir quelque chose hors de la jointure gauche sur une colonne NULL? (Avec l'exemple inventé pour le reproduire localement, probablement un bogue!)
J'ai finalement trouvé un exemple facile à reproduire facilement!
configuration:
create table t1(id integer unsigned,link integer unsigned);
create table t2(id integer unsigned auto_increment,primary key(id));
create table t3(id integer unsigned,content varchar(30));
insert into t1 value(1,null);
insert into t2 value(1);
insert into t3 value(1,'test');
puis exécutez:
select t2.*,t3.*
from t1
left join t2 on t1.link=t2.id
left join t3 on t3.id=t2.id
where t1.id=1;
obtiendra ce tort:
+------+------+---------+
| id | id | content |
+------+------+---------+
| NULL | 1 | test |
+------+------+---------+
Mais si nous créons t2 de cette façon, il ne se produira pas:
create table t2(id integer unsigned);
Donc, ça a quelque chose à voir avec la clé primaire!
NOUVEAU TROUVE
terme, cela ne déclenchera pas le bug:
select t2.*,t3.*
from t1
left join t2 on t1.link=t2.id
left join t3 on t2.id=t3.id
where t1.id=1;
Il a aussi quelque chose à voir avec la direction rejoindre!
À quoi ressemble le reste de vos tableaux? – random
Est-il possible que la jointure soit optimisée? Exécutez une explication sur la requête pour voir ce qui se passe ... – Zed
s'il vous plaît au lieu d'afficher les résultats de vos requêtes juste nous montrer toutes vos tables avec leurs contenus respectifs! – markus