考研门户网站的建设,用群晖建wordpress,麻烦各位童鞋,广西住房和城乡建设官方网站如果使用 join不会有影响。
但是 在使用left join时#xff0c;on和where条件的区别如下#xff1a;
on条件是在生成临时表时使用的条件#xff0c;它不管on中的条件是否为真#xff0c;都会返回左边表中的记录。 where条件是在临时表生成好后#xff0c;再对临时表进行…如果使用 join不会有影响。
但是 在使用left join时on和where条件的区别如下
on条件是在生成临时表时使用的条件它不管on中的条件是否为真都会返回左边表中的记录。 where条件是在临时表生成好后再对临时表进行过滤的条件。
因此如果您在on条件中加入b.del0那么只有满足该条件的b表记录才会和a表记录进行连接否则就会用null填充。而如果您在where条件中加入b.del0那么只有满足该条件的临时表记录才会被返回否则就会被过滤掉。
所以您的两个查询语句的结果可能是不一样的具体取决于b表中是否有del不等于0的记录。如果有那么第一个查询语句会返回更多的记录而第二个查询语句会返回更少的记录。如果没有那么两个查询语句会返回相同的记录。
以下是一个简单的示例来说明这个区别
-- 创建a表和b表
create table a (id int, name varchar(10), del int);
create table b (id int, name varchar(10), sub_id int, del int);-- 插入一些数据
insert into a values (1, a1, 0);
insert into a values (2, a2, 0);
insert into a values (3, a3, 0);insert into b values (1, b1, 1, 0);
insert into b values (2, b2, 2, 0);
insert into b values (3, b3, 2, 1);-- 查询a表和b表
select * from a;
select * from b;-- 结果如下
id name del
----------- ---------- -----------
1 a1 0
2 a2 0
3 a3 0id name sub_id del
----------- ---------- ----------- -----------
1 b1 1 0
2 b2 2 0
3 b3 2 1-- 使用第一个查询语句
select a.name ,b.name from a left join b on a.idb.sub_id
where a.del0 and b.del0;-- 结果如下
name name
---------- ----------
a1 b1
a2 b2-- 使用第二个查询语句
select a.name ,b.name from a left join b on a.idb.sub_id and b.del0
where a.del0;-- 结果如下
name name
---------- ----------
a1 b1
a2 b2
a3 NULL