2012-01-04 112 views
-2

我想从Oracle DB中的表中进行选择。sql选择表的多个列

如果我在单列上的select语句中做出了明显的改进,但对于多列而言,这似乎不起作用。例如

select DISTINCT col1, col2, col3, col4, col5, col6 from table1 

返回相同的结果。

select * from table1 

第2列第3列具有重复值。我想要的是所有上述列值的值,但不是column2和column3的重复值。

您能否请帮助。您的帮助将不胜感激。

谢谢

+1

你可以给出一个表中的内容吗?如果你得到与SELECT *相同的结果,那么COL1中的所有记录都是不同的。 – ProfessionalAmateur 2012-01-04 22:08:16

+0

你想检查[这个问题](http://stackoverflow.com/questions/54418/how-do-i-or-can-i-select-distinct-on-multiple-columns-postgresql)?看起来非常相似 – 2012-01-04 22:09:04

+3

请记住,DISTINCT应用于您要返回的整个列集,而不仅仅是第一列。因此,例如'(1,2,3,4,5,6)'与[(1,2,3,4,5,7)'不同),因为第六列在两行之间是不同的。 – 2012-01-04 22:10:21

回答

5

DISTINCT消除每行和所选列的冗余数据。因此,如果使用DISTINCT选择表的所有列,则只有包含完全相同数据的行才会汇总。

+0

谢谢克里斯的回应。 – Nomad 2012-01-04 22:15:18

+0

感谢您的回答。我已更新我的问题如何解决问题? – Nomad 2012-01-05 00:56:11

+0

请不要编辑问题。否则,这成为一个聊天或留言板;)只需打开一个新的,花一些时间描述你的问题与数据样本等。 – Chris 2012-01-05 09:14:26

1

尝试以下操作:

SELECT DISTINCT COL1 AS COL1, NULL AS COL2, NULL AS COL3, NULL AS COL4, 
     NULL AS COL5, NULL AS COL6 FROM TABLE1 
UNION ALL 
SELECT NULL AS COL1, DCOL2 AS COL2, NULL AS COL3, NULL AS COL4, 
     NULL AS COL5, NULL AS COL6 FROM (SELECT DISTINCT COL2 AS DCOL2 
              FROM TABLE1) 
UNION ALL 
SELECT NULL AS COL1, NULL AS COL2, DCOL3 AS COL3, NULL AS COL4, 
     NULL AS COL5, NULL AS COL6 FROM (SELECT DISTINCT COL3 AS DCOL3 
              FROM TABLE1) 
UNION ALL 
SELECT NULL AS COL1, NULL AS COL2, NULL AS COL3, DCOL4 AS COL4, 
     NULL AS COL5, NULL AS COL6 FROM (SELECT DISTINCT COL4 AS DCOL4 
              FROM TABLE1) 
UNION ALL 
SELECT NULL AS COL1, NULL AS COL2, NULL AS COL3, NULL AS COL4, 
     DCOL5 AS COL5, NULL AS COL6 FROM (SELECT DISTINCT COL5 AS DCOL5 
              FROM TABLE1) 
UNION ALL 
SELECT NULL AS COL1, NULL AS COL2, NULL AS COL3, NULL AS COL4, 
     NULL AS COL5, DCOL6 AS COL6 FROM (SELECT DISTINCT COL6 AS DCOL6 
              FROM TABLE1); 

分享和享受。