使用SELECT DISTINCT或替代3表查询

时间:2013-02-07 00:20:35

标签: sql select distinct

这里我有一个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

3 个答案:

答案 0 :(得分:0)

您应该添加GROUP BY WEEK_NUMBER

答案 1 :(得分: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

答案 2 :(得分:0)

由于您要显示表WEEKLY_TIMECARDDAYLY_CALCULATIONS中的所有字段,因此如果您使用SELECT DISTINCT...,您可能会遇到与您现在遇到的完全相同的情况(许多行与相同的价值)。

DISTINCTGROUP BY用法外,您还需要考虑以下因素:

  1. 你真的 需要所有的字段吗?如果你这样做,那么你可能需要重复的值。如果不这样做,只需包含您需要的字段。
  2. 您需要汇总数据吗?或者您只需要对值进行重复数据删除?如果您需要汇总数据,则必须使用GROUP BY以及相应的聚合函数。如果您不需要聚合数据,我建议您不要使用GROUP BY,因为它可以使您的查询执行速度非常慢(可能取决于您使用的是哪个RDBMB)。
  3. 无论您选择哪种解决方案,请确保您的表格已正确编入索引。
  4. 除此之外,我会使用INNER JOIN明确定义数据之间的关系(而不是使用WHERE条件隐式定义它们)......但这是我个人的偏好。