当前位置:  数据库>sqlserver

在使用 sql server 中 left join 时遇到的一个问题

    来源: 互联网  发布时间:2014-08-29

    本文导语:  先来看一段代码:   代码如下: SELECT *   FROM test1 as t1 left join test2 as t2 on t1.ida=t2.aid --and t2.bid>2   执行结果: 1    1    1    5 1    1    1    6 2    2    2    2 2    2    2    3 3    3    NULL    NULL 4    ...

先来看一段代码:
 

代码如下:
SELECT *
  FROM test1 as t1 left join test2 as t2 on t1.ida=t2.aid
--and t2.bid>2
 

执行结果:
1    1    1    5
1    1    1    6
2    2    2    2
2    2    2    3
3    3    NULL    NULL
4    4    NULL    NULL
5    5    NULL    NULL
 

代码如下:
SELECT *
  FROM test1 as t1 left join test2 as t2 on t1.ida=t2.aid
and t2.bid>2
 

执行结果:
1    1    1    5
1    1    1    6
2    2    2    3
3    3    NULL    NULL
4    4    NULL    NULL
5    5    NULL    NULL

即left join 在on条件后直接跟and时,要注意,and的条件判断字段若存在空值(为从表字段),则无法过滤NULL的情况。
估计right join也有同样的情况(A left join B 等效于 B right join A)

此时准确的应该在后续的where部分加上所需的条件进行过滤。
 

代码如下:
SELECT *
  FROM test1 as t1 left join test2 as t2 on t1.ida=t2.aid
where
 t2.bid>2


执行结果:
1    1    1    5
1    1    1    6
2    2    2    3

或者说,on 后面直接跟的条件只是为了过滤从表已有记录,即只是为了两表之间的关系映射而存在,而left join本身就会保留主表有而从表没有的这部分主表记录。


    
 
 

您可能感兴趣的文章:

  • Unix AIX 5 使用smitty tcpip遇到的问题
  • jquery组件使用中遇到的问题整理及解决
  • Vmware 使用中遇到的问题
  • 请使用QT编程的朋友到以下网址讨论QT中遇到的问题!!!!!!!
  • 使用iText组件不能在表格中显示中文?那位大侠遇到过类似问题?怎么解决?
  • 使用JB时遇到一个问题
  • 使用GDB调试C代码时,遇到的问题。
  • 使用虚拟机安装linux是遇到的问题,请大家帮忙。
  • 使用rcp遇到的问题,请帮忙
  • 使用rsync遇到以下问题?谁能帮助我?
  • 使用grub引导系统遇到问题
  • 使用 awk 时遇到的奇怪现象... 难道是个bug ?
  • 使用mysql中遇到的几个问题
  • JSP中使用INPUT时遇到的问题,谢谢
  • truss使用时遇到的问题:如何确定rename所在的进程或目录
  • 使用jdom遇到的莫名其妙的问题(有关Element.getChildren()返回类型?)
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • 在Applet上使用socket遇到的一个奇怪问题?请帮忙!!
  • 有谁在使用tomcat遇到过这样的问题?
  • 在IBM上使用动态链接库编译多进程程序时遇到的问题~
  • 在vmware虚拟机下可以使用使用boa web server吗?
  • vmware server 怎么使用
  • ubuntu9.10server 使用光驱
  • sql server中使用Unicode字符时要注意的问题
  • sql server 使用ntile获取数据的例子
  • 使用 iplanet directoty Server 必须要安装 TCP/IP 吗?
  • SQL Server 2008无日志文件如何使用MDF文件附加数据库
  • win2000 advance server不能使用jdk1.3???
  • SQL SERVER使用REPLACE将某一列字段中的某个值替换为其他的值
  • MS SQL Server游标(CURSOR)的学习使用
  • 请问如何在 J2EE SDK 里面使用 SQL Server 数据库?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3