統合プライマリ・キー・クエリーの注意点
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
– Records of test1
INSERT INTO
DROP TABLE IF EXISTS
– Records of test2
INSERT INTO
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’);