问一SQL语句 有两张表,A,B。 两张表字段完全相同,a,b,c,d四个字段。 现在要比较出a,b字段相同,但c,d字段不同的数据,显示B表的数据。c,d字段都有可能为空 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select B.*from A,Bwhere A.a||A.b = B.a||B.b and A.c||A.d||'#' != B.c||B.d||'#'? select B.*from A , Bwhere (A.c > B.c or A.c<B.c) and (A.d > B.d or A.d<B.d) and A.a = B.a and A.b = B.b select B.*from A , Bwhere (A.c > B.c or A.c <B.c) and (A.d > B.d or A.d <B.d) and A.a = B.a and A.b = B.b 同意1楼,都说了c,d字段可能为空,where (A.c > B.c or A.c <B.c) and (A.d > B.d or A.d <B.d) 明显错误 引用一下5楼的观点1楼的语句明显错误 A.a||A.b = B.a||B.b如果 A.a = ‘1’ A.b =‘12’ B.a = ‘11’B.b =‘2’那么就能满足上面的条件 因为‘112’=‘112’这是错误的并且也使用不到普通索引 除非你在A表中建立一个函数索引(A.a||A.b)在B表中也建立个函数索引 (B.a||B.b)但是 下面and A.c||A.d||'#' != B.c||B.d||'#'的这个语句因为使用了 != 所以还是要进行全表扫描 所以上面的索引建立和不建立没什么区别因为这个语句是先进行全表扫面 在进行索引扫描 效率很低and A.c||A.d||'#' != B.c||B.d||'#' 这个语句去除掉了 c d 都为空的情况既如果 A表的c d 和B表的 c d 对应的值都为空 那么也不提取这条数据 5楼的说 (A.c > B.c or A.c <B.c) and (A.d > B.d or A.d <B.d)这个语句明显是错的 因为有为空的情况存在那你的意思是 A.c > '' 这个语句语法是错误的了?这个语句和 and A.c||A.d||'#' != B.c||B.d||'#'这个语句的筛选效果是一样的 同意1楼,都说了c,d字段可能为空,where (A.c > B.c or A.c <B.c) and (A.d > B.d or A.d <B.d) 明显错误[/Quote] Quote7:现在不考虑索引,要你这么说,那你还的考虑 A,B表的数据量有多大,谁的更多,考虑是否使用exists。另外为空不是'',是null 懂spring mvc的高手请进 如何编程实现路由拨号? 新手问题编译时找不到符号 求助:FileFilter类的问题,解决 java操作word的组件(或技术)有哪些? bufferedimage问题 在印度NIIT学习java后能达到什么样的水平? JLabel中drawRect时出现的问题 getLocalHost() 方法疑问!! 如何把java编译成可执行的exe文件? 一道小问题 求助,delphi对应的java类型
select B.*
from A,B
where A.a||A.b = B.a||B.b
and A.c||A.d||'#' != B.c||B.d||'#'?
from A , B
where (A.c > B.c or A.c<B.c)
and (A.d > B.d or A.d<B.d)
and A.a = B.a
and A.b = B.b
from A , B
where (A.c > B.c or A.c <B.c)
and (A.d > B.d or A.d <B.d)
and A.a = B.a
and A.b = B.b
and (A.d > B.d or A.d <B.d) 明显错误
1楼的语句明显错误
A.a||A.b = B.a||B.b
如果 A.a = ‘1’ A.b =‘12’
B.a = ‘11’B.b =‘2’
那么就能满足上面的条件 因为‘112’=‘112’
这是错误的
并且也使用不到普通索引 除非你在A表中建立一个函数索引(A.a||A.b)
在B表中也建立个函数索引 (B.a||B.b)但是 下面
and A.c||A.d||'#' != B.c||B.d||'#'
的这个语句因为使用了 != 所以还是要进行全表扫描 所以上面的索引建立和不建立没什么区别
因为这个语句是先进行全表扫面 在进行索引扫描 效率很低and A.c||A.d||'#' != B.c||B.d||'#' 这个语句去除掉了 c d 都为空的情况
既如果 A表的c d 和B表的 c d 对应的值都为空 那么也不提取这条数据
5楼的说 (A.c > B.c or A.c <B.c)
and (A.d > B.d or A.d <B.d)
这个语句明显是错的 因为有为空的情况存在
那你的意思是 A.c > '' 这个语句语法是错误的了?
这个语句和
and A.c||A.d||'#' != B.c||B.d||'#'
这个语句的筛选效果是一样的
同意1楼,都说了c,d字段可能为空,where (A.c > B.c or A.c <B.c)
and (A.d > B.d or A.d <B.d) 明显错误
[/Quote]
现在不考虑索引,要你这么说,那你还的考虑 A,B表的数据量有多大,谁的更多,考虑是否使用exists。
另外为空不是'',是null