从表查询中选择distinct a。*

时间:2013-07-15 07:58:15

标签: sql sql-server distinct

我正在开发一个新项目,并且有很多sql server存储过程,我的任务是处理,改进,修复等。

我很惊讶地看到这样的代码:

select distinct a.*  from tbl_applicant a
  1. 此代码何时起作用?
  2. 如果它在某些表上有效,它会掩盖正确的结果吗?
  3. 应该使用什么?

4 个答案:

答案 0 :(得分:2)

  1. 如果表tbl_applicant存在
  2. 不,它只消除了dupliacte行。
  3. select col1,col2 ... from tbl_applicant group by col1,col2 ...或别名a select a.col1, a.col2 ... from tbl_applicant a group by a.col1,a.col2 ...

答案 1 :(得分:0)

  1. 有效。
  2. 可以。
  3. 此:

    SELECT distinct * FROM TESTTABLE

答案 2 :(得分:0)

别名用于仅从所选表中选择列。 Normaly它与连接一起使用,例如:

SELECT u.*, p.name
FROM user u
JOIN product p ON u.Id = p.productID

您将从用户表中获取所有列,并且只获取产品名称。在你的例子中,它是单独使用的,这不是一个错误,但SELECT DISTINCT * FROM ...也会起作用。 您可以在Table Aliasing on MSDN

上阅读更多内容

答案 3 :(得分:0)

1>如前所述,如果表tbl_applicant存在,则此查询将起作用。

2 - ;查询中的'a'只是表名'tbl_applicant'的别名。在您的情况下,。*与相同。 a。不会屏蔽/更改结果上的任何内容。

“*”本身将选择表格的所有列。这是否正常取决于您的系统。通常最好使用显式列名(例如a.col1,a.col2,...)。在这种情况下,您可以向数据库添加额外的列,但您的应用程序将不会看到这些列。此外,您还可以在代码中获得明确定义的列。

'distinct'用于删除重复项。如果删除distinct,则可能会获得不同的值。你真正得到的取决于你的表中的数据。例如,如果您的表中有一个主键,则不可能有重复的行,并且不需要使用distinct。区别不是免费的。删除重复项将花费您一些运行时间。如果你真的需要它,你应该只使用distinct。

3>如果您必须删除重复的行,并且总是需要所有列,那么您的语句就可以了。