oracle 多字段去重查询
CreationTime--2018年6月29日15点11分
Author:Marydon
1.情景展示
需要对表BASE_MRI_DEVICE的COMPNAME、FIELDSTR、VERSION字段分别进行去重查询,如何使用一个sql搞定?
2.需求分析
注意:是分别对3个字段进行去重,而不是3个字段联合去重。
首先,必须进行三次查询,而将查询结果进行"行合并"需要用到union或union all;
其次,为了区分查询结果属于哪个字段,所以需要3列,
同时,为了保证每次查询只对一个字段进行去重查询,可以将另外2个字段置空。
3.代码实现
方式一:使用group by(数据库通用)
--对COMPNAME、FIELDSTR、VERSION进行去重查询 SELECT * FROM (SELECT COMPNAME, '' FIELDSTR, '' VERSION FROM BASE_MRI_DEVICE UNION ALL SELECT '' COMPNAME, FIELDSTR, '' VERSION FROM BASE_MRI_DEVICE UNION ALL SELECT '' COMPNAME, '' FIELDSTR, VERSION FROM BASE_MRI_DEVICE) GROUP BY COMPNAME, FIELDSTR, VERSION
方式二:使用distinct(Oracle独有)
--对COMPNAME、FIELDSTR、VERSION进行去重查询 SELECT DISTINCT COMPNAME, '' FIELDSTR, '' VERSION FROM BASE_MRI_DEVICE UNION ALL SELECT DISTINCT '' COMPNAME, FIELDSTR, '' VERSION FROM BASE_MRI_DEVICE UNION ALL SELECT DISTINCT '' COMPNAME, '' FIELDSTR, VERSION FROM BASE_MRI_DEVICE
4.效果展示
方式一
方式二