我有一个包含多列的表,但我只需要2个 从tbl选择ID,部门
如果我想使用不同的 - 我该怎么做? 这不起作用: 从tbl选择idm distinct department
答案 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
)
请注意,这将运行很慢,因此仅适用于行数少的表。