【问题标题】:Is there a difference between these two? distinct table.* vs select *这两者有区别吗?不同的表。*与选择*
【发布时间】:2015-08-10 15:00:39
【问题描述】:

我必须从结果集中删除一个字段,并且我想创建相同的结果。复制的正确语法是什么

select distinct t1.* from table1 t1

同时明确指定字段?

【问题讨论】:

  • 是什么让您认为 SQL 不会返回表中存在的重复数据?
  • distinct 选择行相同时删除重复项
  • 如果存在重复项,SQL 绝对会返回它们。
  • 你可以看看 sql server 的文档。它非常清楚地解释了 DISTINCT 参数的作用。 msdn.microsoft.com/en-us/library/ms176104.aspx
  • DISTINCT 适用于整行,而不适用于单个列。

标签: sql sql-server field distinct


【解决方案1】:

有时你只需要测试一下:

没有 DISTINCT:http://sqlfiddle.com/#!6/6805a/1

Value
A
A
B
B

使用 DISTINCT:http://sqlfiddle.com/#!6/6805a/2

Value
A
B

而且,正如我在评论中所写,请不要在没有 PRIMARY KEY 的情况下创建表...使用 PRIMARY KEY 显然这两个查询是等价的,因为 PRIMARY KEY 是唯一的。

【讨论】:

    【解决方案2】:

    例如,您的表中有这些

    one
    one
    two
    three
    three
    

    1 select * from table1 t1 结果:

    one
    one
    two
    three
    three
    

    2 select distinct t1.* from table1 t1 结果:

    one
    two
    three
    

    【讨论】:

      【解决方案3】:

      正如用户 Siyual 在问题的 cmets 中提到的那样,

      DISTINCT 适用于整行,而不适用于单个列。

      这正是我正在寻找的信息。

      【讨论】:

      • 严格来说这不是真的。 Distinct 对查询中指定的列起作用,因此,从同一个表中选择时,不同的 last_name 会得到与不同的 last_name、first_name 不同的结果。当然,您不应该使用 select distinct *,因为这是一种 SQL 反模式,如果您在表上拥有所有表都应该拥有的 PK,它不会过滤任何结果,因为每条记录都是唯一的。
      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多