0

Getting error message [Err] 1060 - Duplicate column name 'id'

SELECT c.id, c.name, COUNT(all.id) 'All', 
       COUNT(unanswered.id) 'Unanswered',
       COUNT(unchecked.id) 'Unchecked'
FROM courses c
INNER JOIN courses-lessons cl ON c.id = cl.cid
INNER JOIN questions all ON cl.id = all.lid
INNER JOIN
(
    SELECT * 
    FROM questions
    WHERE id NOT IN (SELECT qid FROM answers)
) unanswered ON cl.id = unchecked.lid
INNER JOIN
(
    SELECT *
    FROM questions q
    INNER JOIN 
    (
        SELECT * 
        FROM answers
        WHERE id NOT IN (SELECT aid FROM answer_chk_results)
    ) a ON q.id = a.qid 
) unchecked ON cl.id = unchecked.lid
GROUP BY c.id, c.name

What am I missing? Can't find what's wrong.

UPDATE

Database structure

https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c

4

3 に答える 3

0

質問表と回答表の両方に id 列があります。SELECT * を実行すると、両方の id 列が取得されます。* を使用する代わりに、SELECT で必要な列を指定してみてください。

同様の質問については、こちらを参照してください: SQL Duplicate column name error

于 2012-08-29T16:18:51.747 に答える
0

それが問題の一部であるかどうかはわかりませんが、MySQL キーワードであるため、テーブルを "all" にエイリアスしないでください。

于 2012-08-29T16:19:56.690 に答える
0

クエリのこの部分にある可能性が最も高いです。

SELECT *
FROM questions q
INNER JOIN 
(
    SELECT * 
    FROM answers
    WHERE id NOT IN (SELECT aid FROM answer_chk_results)
) a ON q.id = a.qid 

外側のクエリには という 2 つのフィールドがありid、必要なフィールドを指定する必要がありますid。また、使用する代わりに、SELECT *必要なフィールドを呼び出す必要があります。

ALL予約語です。そのエイリアスを変更するか、バッククォートを使用することを検討し`ます。

テーブル構造に基づいて、次のようになります。

SELECT c.id, 
    c.name, 
    COUNT(allq.id) 'All', 
    COUNT(unanswered.id) 'Unanswered',
    COUNT(unchecked.id) 'Unchecked'
FROM courses c
INNER JOIN courses-lessons cl 
    ON c.id = cl.cid
INNER JOIN questions allq 
    ON cl.id = allq.lid
INNER JOIN
(
    SELECT q.id, a.qid, q.lid
    FROM questions q
    INNER JOIN 
    (
        SELECT id, qid
        FROM answers
        WHERE id NOT IN (SELECT aid FROM answer_chk_results)
    ) a 
        ON q.id = a.qid 
) unchecked 
    ON cl.id = unchecked.lid
INNER JOIN
(
    SELECT id
    FROM questions
    WHERE id NOT IN (SELECT qid FROM answers)
) unanswered 
    ON cl.id = unchecked.lid
GROUP BY c.id, c.name
于 2012-08-29T16:20:07.573 に答える