統合プライマリ・キー・クエリーの注意点

1435 ワード

連合クエリー
2つのテーブル
test 1 test 2構造一致
1つのleft joinだけが1つの条件関連付け(ランダムな組み合わせで2倍以上のデータが得られた)
通常は2つのプライマリ・キーを関連付けます
通常のデータ・クエリーの結果
クエリの結果が2倍になりました
結論:結合プライマリ・キーがonの後ろに置かれない場合、ランダムに結合するときに1つのキーだけが使用され、もう1つのキーが制約されていないことを証明します.
Mysqlはまず連合してからwhereデータが原因です.
テストデータはsqlに基づいてselect*from test 1 a left join test 2 b on a.id=b.id where a.id=1 and b.id=1を検証できます.
select * from test1 a left join test2 b on a.id= b.id and a.id1=b.id1 where a.id=1
DROP TABLE IF EXISTS test1 ; CREATE TABLE test1 ( id int(11) NOT NULL, id1 int(255) NOT NULL, PRIMARY KEY ( id , id1 ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
– Records of test1
INSERT INTO test1 VALUES (‘1’, ‘1’); INSERT INTO test1 VALUES (‘1’, ‘2’); INSERT INTO test1 VALUES (‘2’, ‘1’); INSERT INTO test1 VALUES (‘2’, ‘2’);
DROP TABLE IF EXISTS test2 ; CREATE TABLE test2 ( id int(11) NOT NULL, id1 int(255) NOT NULL, PRIMARY KEY ( id , id1 ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
– Records of test2
INSERT INTO test2 VALUES (‘1’, ‘1’); INSERT INTO test2 VALUES (‘1’, ‘2’); INSERT INTO test2 VALUES (‘2’, ‘1’); INSERT INTO test2 VALUES (‘2’, ‘2’);