我们在用多表连接的时候(这里我们主要讨论外连接),有些时候可以在连接条件加上其他设定,比如:Select *
From Table1 t1
Left Join Table2 t2 On t1.SomeCol_1 = t2.SomeCol_2 AND t2.SomeCol_3 = 'SomeString1'
Left Join Table2 t3 On t2.SomeCol_4 = t3.SomeCol_5 AND t3.SomeCol_6 = 'SomeString2'和Select *
From Table1 t1
Left Join Table2 t2 On t1.SomeCol_1 = t2.SomeCol_2
Left Join Table3 t3 On t2.SomeCol_4 = t3.SomeCol_5
Where t2.SomeCol_3 = 'SomeString1' AND t3.SomeCol_6 = 'SomeString2'之间到底有什么区别?因为他们产生不同的结果集,一般情况下前者会比后者的结果集更大。查了一些资料好像说是在条件判断顺序不同而产生了差异。为了弄得清楚明白,特此请教各位高手,麻烦你们帮忙解释一下,非常非常感谢!人格担保迅速结贴。
From Table1 t1
Left Join Table2 t2 On t1.SomeCol_1 = t2.SomeCol_2 AND t2.SomeCol_3 = 'SomeString1'
Left Join Table2 t3 On t2.SomeCol_4 = t3.SomeCol_5 AND t3.SomeCol_6 = 'SomeString2'和Select *
From Table1 t1
Left Join Table2 t2 On t1.SomeCol_1 = t2.SomeCol_2
Left Join Table3 t3 On t2.SomeCol_4 = t3.SomeCol_5
Where t2.SomeCol_3 = 'SomeString1' AND t3.SomeCol_6 = 'SomeString2'之间到底有什么区别?因为他们产生不同的结果集,一般情况下前者会比后者的结果集更大。查了一些资料好像说是在条件判断顺序不同而产生了差异。为了弄得清楚明白,特此请教各位高手,麻烦你们帮忙解释一下,非常非常感谢!人格担保迅速结贴。
解决方案 »
- 怎么用SQL语句实现?各位看官进来一看
- 请问此oracle 的函数如何转换成sql server 函数
- 求一条SQL 语句 , 高手指教!关于取“其他”值
- sqlserver2000中,使用log函数问题
- 两个表进行对比,把不同的数字写在第三个表中,怎么样写查询语句
- ms sql 2000备份恢复到ms sql2008时提示出错
- 开机后没做任何操作,sqlserver进程就长期站用cpu时间!导致就像死机了一样!是中毒了吗?怎么解决?
- 求一個這樣的SQl 語句
- 如何解决父子表的事务处理问题!。。。。。。。。。。。。。急
- rida(),能在回答一问题吗?
- 在查询分析器中能更新,在企业管理器中不能正常更新
- 怎么将excel导入MS SQL啊??是不是有可以直接导入的方式啊??
选出Table1的全部记录第二种情况:
选出Table1中联接字段符合where条件的记录
Select *
From Table1 t1
Left Join Table2 t2 On t1.SomeCol_1 = t2.SomeCol_2 AND t2.SomeCol_3 = 'SomeString1'
Left Join Table2 t3 On t2.SomeCol_4 = t3.SomeCol_5 AND t3.SomeCol_6 = 'SomeString2'(2)
Select *
From Table1 t1
Left Join Table2 t2 On t1.SomeCol_1 = t2.SomeCol_2
Left Join Table3 t3 On t2.SomeCol_4 = t3.SomeCol_5
Where t2.SomeCol_3 = 'SomeString1' AND t3.SomeCol_6 = 'SomeString2'
(1)中的t2.SomeCol_3 = 'SomeString1'仅仅限定Table2 t2的数据,即对于t1有而t2没有的数据,是不过滤掉这部分数据的。
t3.SomeCol_6 = 'SomeString2'同理。(1)中的t2.SomeCol_3 = 'SomeString1'在t1与t2连接生成的数据集后过滤数据,因为此时可能存在t1有而t2为空的数据,也会过滤掉这部分数据。
t3.SomeCol_6 = 'SomeString2'同理。而对于inner join限定条件放在连接条件或放在Where条件效果相同。亦即楼上老大说的:ON 后边跟的是联接条件,where后面跟的是筛选条件,如果在inner join语句中,效果是一样的,但是在外连接语句中,先按照外联接的条件生成结果集,再根据WHERE条件筛选。