首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个左联结的有关问题

2012-09-05 
一个左联结的问题左表##temptable有 500条记录,左联结到右表,但结果只是有几十条记录。 左联结是不是应该无

一个左联结的问题
左表##temptable有 500条记录,左联结到右表,但结果只是有几十条记录。 左联结是不是应该无论条件是否满足,都会返回左表的记录数吗?
代码如下:

SQL code
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'


[解决办法]
因为where语句。
而且左联接并非一定返回左表条数,条数还要取决于右表的匹配情况

SQL code
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产生的结果集再进行一次筛选。

热点排行