一个左联结的问题
左表##temptable有 500条记录,左联结到右表,但结果只是有几十条记录。 左联结是不是应该无论条件是否满足,都会返回左表的记录数吗?
代码如下:
select a.*,b.id from ##temptable a left outer join header b on a.style=b.styleno+'-'+b.colorcode and a.factory=b.factory where b.status='CONFIRMED'
create table #t1(id int, name varchar(10))insert into #t1 select 1,'Ken' union allselect 2,'David' union allselect 3,'Bradley' create table #t2(id int, class varchar(10))insert into #t2 select 1,'English' union allselect 1,'Math' union allselect 1,'Geo' union allselect 2,'English' union allselect 2,'Math' union allselect 2,'Geo' union allselect 2,'CS' select * from #t1 left join #t2on #t1.id = #t2.id/*id name id class1 Ken 1 English1 Ken 1 Math1 Ken 1 Geo2 David 2 English2 David 2 Math2 David 2 Geo2 David 2 CS3 Bradley NULL NULL*/
[解决办法]
而如果是INNER JOIN内联接的话,WHERE子句可以改写成AND,不会对最后的结果集的条数产生影响。而LEFT JOIN,RIGHT JOIN这两种联接,WHERE和AND是有区别的,WHERE会对AND产生的结果集再进行一次筛选。