我正在开发一个新项目,并且有很多sql server存储过程,我的任务是处理,改进,修复等。
我很惊讶地看到这样的代码:
select distinct a.* from tbl_applicant a
答案 0 :(得分:2)
tbl_applicant
存在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)
此:
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>如果您必须删除重复的行,并且总是需要所有列,那么您的语句就可以了。