0

在这里,我有一个 SQL 语句,它正在检索所有正确的东西,但我需要它是 DISTINCT。

因此,对于 WEEK_NUMBER,其返回的 week_number = 1,1,1,1,1,1 等

我希望它浓缩为 1。这是一个 3 表查询,我不确定如何包含 SELECT DISTINCT 功能或替代方案,有什么想法吗?

SELECT WEEKLY_TIMECARD.*,DAILY_CALCULATIONS.*,EMPLOYEE_PROFILES.EMPLOYEE_NUMBER
FROM WEEKLY_TIMECARD, DAILY_CALCULATIONS, EMPLOYEE_PROFILES 
WHERE EMPLOYEE_PROFILES.EMPLOYEE_NUMBER = WEEKLY_TIMECARD.EMPLOYEE_NUMBER
AND EMPLOYEE_PROFILES.EMPLOYEE_NUMBER = DAILY_CALCULATIONS.EMPLOYEE_NUMBER
AND WEEKLY_TIMECARD.WEEK_NUMBER = DAILY_CALCULATIONS.WEEK_NUMBER
4

3 回答 3

0

你应该添加GROUP BY WEEK_NUMBER

于 2013-02-07T00:23:52.097 回答
0

试试这个:

SELECT DISTINCT WEEKLY_TIMECARD.WEEK_NUMBER
FROM 
  WEEKLY_TIMECARD, 
  DAILY_CALCULATIONS, 
  EMPLOYEE_PROFILES 
WHERE EMPLOYEE_PROFILES.EMPLOYEE_NUMBER = WEEKLY_TIMECARD.EMPLOYEE_NUMBER
  AND EMPLOYEE_PROFILES.EMPLOYEE_NUMBER = DAILY_CALCULATIONS.EMPLOYEE_NUMBER
  AND WEEKLY_TIMECARD.WEEK_NUMBER = DAILY_CALCULATIONS.WEEK_NUMBER
于 2013-02-07T00:37:29.710 回答
0

由于您要显示表中的所有字段,WEEKLY_TIMECARD并且DAYLY_CALCULATIONS如果您使用,SELECT DISTINCT...您最终可能会遇到与您现在遇到的完全相同的情况(许多行具有相同的值)。

除了DISTINCTGROUP BY用法,您还需要考虑以下几点:

  1. 真的需要所有的领域吗?如果你这样做,那么也许你确实需要重复的值。如果您不这样做,只需包含您需要的字段。
  2. 您需要汇总数据吗?或者您只需要对这些值进行重复数据删除?如果需要聚合数据,则必须使用GROUP BY, 和适当的聚合函数。如果您不需要聚合数据,我建议您不要使用GROUP BY,因为它会使您的查询执行非常缓慢(这可能取决于您使用的 RDBMBS)。
  3. 无论您选择哪种解决方案,请确保您的表已正确编入索引。

除此之外,我会使用INNER JOIN显式定义您的数据之间的关系(而不是使用WHERE条件隐式定义它们)......但这是我个人的偏好。

于 2013-02-07T00:42:58.947 回答