標籤:
總是在暴漏出bug的時候,才發現自己對知識掌握的不深入。
存在兩張表結構
drop table if EXISTS A;CREATE TABLE A ( ID int(1) NOT NULL, PRIMARY KEY (ID)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into A values ( 1 );insert into A values ( 2 );insert into A values ( 3 );insert into A values ( 4 );insert into A values ( 5 );insert into A values ( 6 );
drop table if EXISTS B;CREATE TABLE B ( ID int(1) NOT NULL, PRIMARY KEY (ID)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into B values ( 1 );insert into B values ( 2 );insert into B values ( 3 );
sql1: select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID where B.ID<3
sql2: select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID and B.ID<3
結果是不一樣的。
sql1結果:
sql2結果:
ON與where的使用注意事項:
(1):ON後面的篩選條件主要是針對的是關聯表【而對於主表刷選條件不適用】,主表條件在on後面時附表只取滿足主表帥選條件的值、而主表還是取整表
(2):對於主表的篩選條件應放在where後面,不應該放在ON後面
(3):對於關聯表我們要區分對待。如果是要條件查詢後才串連應該把查詢件放置於ON後。如果是想再串連完畢後才篩選就應把條件放置於where後面
mysql left/right join on 和where的細小差異