查看: 1662|回复: 25

oracle查询不重复多列sql写法

[复制链接]
发表于 2012-10-24 05:08:27 | 显示全部楼层 |阅读模式
oracle查询不重复多列sql写法

Oracle中要求查询表customer 中 t.address , t.customer_name不重复的列:

通常想法是:
Sql代码  
select distinct t.address , t.customer_name from customer t  

然而这种写法在oracle是错误的。

因此有第二种想法:
Sql代码  
select count(*) from ( select distinct t.address,t.customer_name from customer t)  

这种写法是正确的,然而有没有更好的写法呢
   
突发奇想的第三种,充分利用了||的连接功能:
Sql代码  
select   count(distinct t.address ||t.customer_name) from  customer t  

这样不就ok了吧,其实不是的,看看下面这种情况就知道了
若第一条记录为:
Sql代码  
address= testAddT ,customer_name=omcat  

第二条记录
Sql代码  
address= testAdd ,customer_name=Tomcat  
   
这种情况t.address ||t.customer_name得出的值都是一样的,然而显然这两条记录是不同的,如何解决这种问题呢,就是加入特殊字符来解决,比如我们确定这两列字段中不会出现#这样的字符内容,好办,此时就可以写出如下完美的sql语句了

Sql代码  
select   count(distinct t.address ||'#'||t.customer_name) from  customer t  

最后说明:不同的数据库中的sql查询语法都可能都会有差别的所以要针对特定数据库而言,不过思想是可以借鉴的,因此重要的是理解灵活的解决问题思想.
发表于 2012-10-24 12:41:44 | 显示全部楼层
帮你项项吧  
发表于 2012-10-25 05:05:40 | 显示全部楼层
说的不错  
发表于 2012-10-25 18:48:50 | 显示全部楼层
好帖,有才  
发表于 2012-10-26 20:12:47 | 显示全部楼层
好啊,,不错、、、、  
发表于 2012-10-27 13:15:13 | 显示全部楼层
围观来了哦  
发表于 2012-10-31 16:26:19 | 显示全部楼层
我毫不犹豫地把楼主的这个帖子收藏了  
发表于 2014-10-4 01:40:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2015-1-26 08:13:51 | 显示全部楼层
我在顶贴~!~  
你说啥 该用户已被删除
发表于 2015-2-28 09:38:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
高级模式
B Color Image Link Quote Code Smilies

本版积分规则