关于SQL中SELECT DISTINCT的困惑

时间:2013-09-13 18:23:30

标签: sql select distinct

当我选择COLUMN_1时,我在数据库中获得了正确数量的8行,因为它没有给我重复的行和它我想要的

SELECT DISTINCT COLUMN_1
FROM TABLE
WHERE COLUMN_3=12;

但是当选择COLUMN_1,COLUMN_2时它在我的数据库中给了我53行,这不是我想要的......

SELECT DISTINCT COLUMN_1,COLUMN_2
FROM TABLE
WHERE COLUMN_3=12;

我知道当我用distinct选择两列时,它会为两列的组合提供唯一值。 DISTINCT适用于列的组合,而不仅仅是第一列。所以我的问题是我如何选择COLUMN_1COLUMN_2这样他们给我8行而没有重复?因为只要我添加COLUMN_2它就会提供更多我应该拥有的行..

2 个答案:

答案 0 :(得分:4)

您必须决定您想要的column_2值。

一种简单的方法是group by

SELECT COLUMN_1, min(COLUMN_2)
FROM TABLE
WHERE COLUMN_3=12
GROUP BY COLUMN_1;

答案 1 :(得分:1)

我并不完全清楚你的确切要求,但这里一个很好的解决方案可能是使用一些聚合功能王来防止重复,但仍然会返回列中的所有值,导致重复,例如

以下数据

COLUMN1 | COLUMN2
-----------------
a       | x
b       | x
c       | y
a       | z
b       | y
a       | y

将显示为,

COLUMN1 | COLUMN2
-----------------
a       | x,z,y
b       | x,y
c       | y

您没有指定您正在使用的数据库,但在Oracle中,您可以使用LISTAGG函数,在您的情况下可能类似于以下内容:

SELECT COLUMN1,
       LISTAGG(COLUMN2, ',') WITHIN GROUP (ORDER BY COLUMN2) "COLUMN2_VALUES",
  FROM TABLE

如果您没有使用Oracle,这听起来像是一个合适的解决方案,那么值得检查您选择的RDBMS是否提供类似的东西。