VERSION 使用しているサーバー バージョン: 5.1.36-community-log MySQL Community Server (GPL)
私は最終的にそれを簡単に再現するための簡単な例を考案しました!
設定:
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');
次に実行します:
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;
これを間違って取得します:
+------+------+---------+
| id | id | content |
+------+------+---------+
| NULL | 1 | test |
+------+------+---------+
しかし、この方法で t2 を作成すると、それは起こりません:
create table t2(id integer unsigned);
つまり、主キーと関係があります。
新しい発見
これを実行してもバグは発生しません:
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;
したがって、結合方向にも関係があります。