2017-05-03 66 views
-1

我有以下的PostgreSQL声明:SQL加入产生重复行

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

但是结果我回来有3行,我 寻找的副本。如何更改我的查询以消除重复项。

Query Result

+2

显示我们的DB模式,样本数据和预期的输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 –

+0

我不会使用不同的,因为它隐藏了问题。看起来你在表结构上有一个设计上的缺陷导致重复记录的基数问题;或者你缺少连接标准。这两个表的键和外键是什么? – xQbert

回答

1

在SELECT语句中使用不同的,你可以删除重复

试试这个: -

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

你需要使用合格列名来写你的查询。每个列引用都应该包含表名。这是一个好习惯;它可以防止您看到的结果等意外结果。

基于列的名字,我想你的查询是:

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;