选择id的另一列和另一列

时间:2010-11-08 09:32:06

标签: sql ms-access select

我有一个包含多列的表,但我只需要2个 从tbl选择ID,部门

如果我想使用不同的 - 我该怎么做? 这不起作用: 从tbl选择idm distinct department

5 个答案:

答案 0 :(得分:4)

使用以下内容获取不同的行:

select distinct id, department 
from tbl

但是,如果某些部门有多个Id,您不能简单地获得不同的部门 - 您需要弄清楚您想要的多个Id中的哪一个(最多?分钟?其他?)。

答案 1 :(得分:3)

SELECT  * FROM Table c1
 WHERE ID = (SELECT MIN(ID) FROM Table c2
    WHERE c1.department = c2.department)

答案 2 :(得分:2)

DISTINCT需要对所有列进行操作,原因与GROUP BY需要包含所有列(没有聚合函数对其进行操作)的原因相同,那就是如果要将DISTINCT应用于以下结果集

id    department
----------------
1     one
2     one
3     one
4     two

然后即使允许SELECT id, DISTINCT department FROM table_name(并且它在某些数据库中;例如mysql可以按部门分组并且不在GROUP BY中包含id),那么最终会出现未定义的情况:

id    department
----------------
?     one
4     two

应该去代替? - 1,2或3?

答案 3 :(得分:0)

小组会修复你的问题吗?

select id, department from tbl group by id

答案 4 :(得分:0)

问题的确切含义尚不清楚,但是一种情况可能是您希望获取所有行,除了特定的列应仅包含唯一值,并且您不介意为实现此目的而丢弃了哪些行。

在SQL Server中,可以通过以下方式实现:

SELECT id, department FROM tbl WHERE id IN (
    SELECT MIN(id)
    FROM tbl
    GROUP BY department
)

其中id对于每一行都是唯一的,department是应该不同的列,而tbl是表名。

如果只想对非NULL值执行此检查(因此仍返回department的所有NULL值),可以将其调整为:

SELECT id, department FROM tbl WHERE department IS NULL OR id IN (
    SELECT MIN(id)
    FROM tbl
    GROUP BY department
)

请注意,这将运行很慢,因此仅适用于行数少的表。