1

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

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

select distinct a.*  from tbl_applicant a
  1. 这段代码什么时候可以工作?
  2. 如果它确实在某些表上工作,它掩盖了正确的结果?
  3. 应该改用什么?
4

4 回答 4

2
  1. 如果表tbl_applicant存在
  2. 不,它只是消除重复的行。
  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 ...
于 2013-07-15T08:04:00.770 回答
1

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

2> 查询中的“a”只是表名“tbl_applicant”的别名。在您的情况下, a.* 与 .* 相同。一个。不会掩盖/改变结果的任何内容。

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

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

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

于 2013-07-15T08:40:04.883 回答
0

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

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

您将从用户表中获取所有列,并且只有产品名称。在您的示例中,它是单独使用的,这不是错误,但是 SELECT DISTINCT * FROM... 也可以。您可以在 MSDN上阅读有关表别名的更多信息

于 2013-07-15T08:20:14.210 回答
0
  1. 有用。
  2. 可。
  3. 这个:

    SELECT distinct * FROM TESTTABLE

于 2013-07-15T08:05:43.550 回答