使用join时如何避免两个表之间的重复?

我有两个表 work_tableprogress_table

work_table 有以下列:

id[primary key],department,dept_name,dept_code,created_time,updated_time

progress_table 有以下列:

id[primary key],project_id,progress,progress_date

我只需要在表格中更新上次更新的进度值,现在我得到了重复项。

这是尝试过的代码:

select
  row_number() over (order by a.dept_code asc) AS sno,a.dept_name,b.project_id,p.physical_progress,DATE(b.updated_time) as updated_date,b.created_time
from 
  masters.dept_users as a,work_table as b
LEFT JOIN
  progress as p on b.id = p.project_id
order by
  a.dept_name asc

它显示了具有相同 id 的进度的重复值如何解决它?[进度值是整数,其值将提供给表单]

iCMS 回答:使用join时如何避免两个表之间的重复?

重新格式化您的查询后,有些事情变得清晰...

  1. 您混合使用了 ,JOIN 语法(为什么!?)
  2. 您从 masters.dept_users 表开始,但不要在说明中提及
  3. 您在 dept_userswork_table 之间没有连接谓词
  4. 您计算了一个 sno,但没有 partition by 并且从不使用它
  5. 您的查询包含上述表格说明中未提及的列

最重要的是,您使用了无意义的别名,例如 ab?为了他人的爱,为了你未来的自己(有一天会尝试阅读这篇文章),请让别名在某种程度上有意义。


你可能想要像......

WITH
  sorted_progress AS
(
  SELECT
    *,ROW_NUMBER() OVER (
      PARTITION BY project_id
          ORDER BY progress_date DESC -- This may need to be updated_time,your question is very unclear
    )
      AS seq_num
  FROM
    progress
)
SELECT
  <whatever>
FROM
  masters.dept_users   AS u
INNER JOIN
  work_table           AS w
    ON  w.user_id = u.id  -- This is a GUESS,but you need to do SOMETHING here
LEFT JOIN
  sorted_progress      AS p
    ON  p.project_id = w.id  -- Even this looks suspect,are you SURE that w.id is the project_id?
    AND p.seq_num    = 1

这至少说明了如何获得最新的进度记录 (p.seq_num = 1),但是其他连接是否正确是您必须重复(和三次)检查的事情自己。

本文链接:https://www.f2er.com/169314.html

大家都在问