【问题标题】:Using SELECT DISTINCT or alternative with a 3 table query将 SELECT DISTINCT 或替代方法与 3 个表查询一起使用
【发布时间】:2013-02-07 00:20:35
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 StackOverflow。请使用您正在使用的 SQL 引擎标记您的问题。此外,提供样本输入和结果。
  • 您是否尝试像这样在查询中添加 distinct:SELECT DISTINCT ...
  • 我不知道该放在哪里,你能告诉我吗?我之前做过一个,它是 SELECT DISTINCT WEEK_NUMBER AS W FROM ...。但在这种情况下,我不知道如何处理'FROM'之前的东西
  • 输出中需要哪些字段?只是 WEEK_NUMBER 还是其他一些字段?

标签: sql select distinct


【解决方案1】:

试试这个:

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】:

    你应该添加GROUP BY WEEK_NUMBER

    【讨论】:

    • 这不起作用,因为您需要按不在聚合函数中的所有输出字段进行分组。
    • 好吧,我无法反驳)
    • 某些 SQL“方言”可能不允许您这样做,因为它们要求每个输出列都是分组列、聚合函数或表达式。
    • @Barranka 一些方言?好的,我现在真的很感兴趣)哪些会让你这样做,只是好奇?对于不在 group by 或 aggregate 函数中的字段,他们会输出什么?
    • @Adi,谢谢!我会记住的。这不符合 ANSI,最好更改设置以避免意外。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多