2017-05-03 55 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;