【问题标题】:SQL Join producing duplicate rowsSQL Join 产生重复的行
【发布时间】:2017-05-03 15:28:10
【问题描述】:

我有以下 PostgreSQL 语句:

SELECT answer, answermark,answerid, answer.questionid, quizid 
FROM answer
LEFT JOIN  questions 
  ON  answermark = answer.questionid 
WHERE quizid = 1
ORDER BY answermark

但是我得到的结果与我的 3 行重复 寻找。如何更改查询以消除重复项。

【问题讨论】:

  • 向我们展示数据库架构、示例数据和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
  • 我不会使用 distinct 因为它隐藏了问题。看来您的表结构存在设计缺陷,导致重复记录的基数问题;或者您缺少加入条件。这两个表的键和外键是什么?

标签: sql postgresql join sql-order-by


【解决方案1】:

在 select 语句中使用 distinct 可以删除重复项

试试这个:-

SELECT distinct answer, answermark,answerid, answer.questionid, quizid FROM answer
LEFT JOIN  questions ON  answermark = answer.questionid WHERE quizid =1
ORDER BY answermark

【讨论】:

    【解决方案2】:

    您需要使用限定列名来编写查询。每个列引用都应包含表名。这是一个好习惯;它可以防止意外结果,例如您所看到的结果。

    根据列名,我认为您的查询是:

    SELECT a.answer, a.answermark, a.answerid, a.questionid, q.quizid 
    FROM answer LEFT JOIN 
         questions q
         ON  a.answermark = a.questionid 
    ---------^ I am guessing `answermark` comes from `answer`, not `questions`.
    WHERE q.quizid = 1
    ORDER BY a.answermark;
    

    我不知道为什么将名为answermark 的列与名为questionid 的列进行比较,而不管表的来源如何。如果这是一个有效的比较,那么您的数据库命名约定很差。

    我怀疑你想要这样的东西:

    SELECT a.answer, a.answermark, a.answerid, a.questionid, q.quizid 
    FROM answer LEFT JOIN 
         questions q
         ON q.questionid = a.questionid 
    WHERE q.quizid = 1
    ORDER BY a.answermark;
    

    【讨论】:

      猜你喜欢
      • 2020-09-19
      • 2012-02-20
      • 2011-12-30
      • 1970-01-01
      • 2017-09-12
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      相关资源
      最近更新 更多