【问题标题】:How to remove duplicate in Left Join query result如何删除左连接查询结果中的重复项
【发布时间】:2021-02-15 22:52:55
【问题描述】:

看看这些表格:

餐桌招聘:

表技能_招聘:

我想展示与招聘相关的技能。如您所见,表skill_hirings 中有3 条记录hiring_id = 3。所以当我使用左连接查询时,它会返回 3 条相同的记录。

所以我想删除重复记录,只返回id_hiring的唯一记录。

我阅读了一些 StackOverflow QnA,他们建议使用 GROUP BY 子句,但我仍然无法弄清楚。

查询:

SELECT id_hiring, company_id, title, status, start_salary, end_salary, 
viewer, open, close, expired 
 FROM (
    SELECT h.id id_hiring, * FROM hirings h 
    LEFT JOIN skill_hirings sh ON sh.hiring_id = h.id 
    LEFT JOIN skills s ON s.id = sh.skill_id 
    WHERE title ILIKE '%'
) RESULT

查询和结果:

注意:查询中的通配符%将替换为变量

【问题讨论】:

  • 你期待什么输出?
  • 你的问题完全莫名其妙。 LEFT JOIN 正在做它应该做的事情。也许你应该解释一下你想要发生什么。
  • 如果您期望特定招聘 ID 的技能,不应该是内部联接吗?同样,我是根据您提供的有关问题的信息说的。
  • 我也不确定你想要什么结果。你能显示你想要的结果吗?你似乎没有使用技能表中的任何东西,你需要加入它吗?似乎您不需要子查询,您可以改用column aliases
  • 我想帮忙,但你想要什么还不清楚。您想如何在一行中显示招聘的技能列表?你想要技能名称还是更多?您必须告诉我们您想要什么,以便我们提供帮助。请向我们展示您想要的结果,这将有很大帮助。

标签: sql postgresql


【解决方案1】:

在撰写此答案时,我们仍然不知道哪些字段来自哪些表。根据当前的解释,尚不清楚为什么以下内容不能满足您的需求(尽管它可能根本无法运行,具体取决于任何必填字段是否真的来自我拥有的 skill_hiringsskills table不包括在内)。

SELECT
    h.id as id_hiring,
    h.company_id,
    h.title,
    h.status,
    h.start_salary,
    h.end_salary, 
    h.viewer,
    h.open,
    h.close,
    h.expired 
FROM
    hirings h 
WHERE
    h.title ILIKE '%'

【讨论】:

    【解决方案2】:

    作为一个快速的'n 肮脏的解决方案将执行相同的查询两次并将它们与UNION 放在一起。它会删除重复的行。

    可能不是最优化的解决方案,但应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2014-07-21
      相关资源
      最近更新 更多