【问题标题】:select distinct and one another column of the id选择不同的和另一列 id
【发布时间】:2011-05-06 13:47:53
【问题描述】:

我有一个包含多列的表,但我只需要 2 个。

select id, department from tbl

如果我想使用distinct,我该怎么做? 这不起作用:

select id, distinct department from tbl

【问题讨论】:

  • 您没有提供足够的信息来回答。您应该发布一些示例数据。

标签: sql ms-access select


【解决方案1】:

使用以下方法获取不同的行:

select distinct id, department 
from tbl

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

【讨论】:

  • 我希望 distinct 仅适用于部门,并且我需要的其余列将可供以后使用,因此我需要获取 id 列
  • @Y.G.J - 每个部门是否只有一个 ID 关联,还是多个?
  • 我看不出这个答案有什么问题,鉴于 OP 缺乏信息,这是最好的办法。
【解决方案2】:
SELECT  * FROM Table c1
 WHERE ID = (SELECT MIN(ID) FROM Table c2
    WHERE c1.department = c2.department)

【讨论】:

    【解决方案3】:

    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?

    【讨论】:

      【解决方案4】:

      小组会解决您的问题吗?

      select id, department from tbl group by id
      

      【讨论】:

      • 不,不在 msaccess(或 mysql 以外的数据库)中。建议的 SQL 在遵循关于 GORUP BY 的 SQL 标准的数据库中引发错误。
      • 对不起,我的意思是:select id, department from tbl group by id, department
      【解决方案5】:

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

      在 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
      )
      

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

      【讨论】:

        猜你喜欢
        • 2015-01-11
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 2018-07-24
        • 1970-01-01
        相关资源
        最近更新 更多