2016-06-18 5 views
0

私はSQLを初めて使い、ここで助けを探していきたいと思います。 英語は母国語ではありませんので、不明な点がある場合はお気軽にお問い合わせください!SQL:複数回表示されるエントリを除外します

トピック名のように、複数回存在するテーブルからエントリ(文字列)を除外したいということを意味します。

私のコードは次のようになります。

SELECT DISTINCT characterid, firstname, lastname, courseid 
FROM Teaches 
NATURAL JOIN Character 
GROUP BY characterid, firstname, lastname, courseid 

そして、それは私にこれを与える:

enter image description here

は、タスクが1つの以上のコースを教えてみんなをフィルタリングすることです。この場合SnapeとQuirrellになります。 私は

HAVING count(characterid) > 1 

をカウントでそれを試してみましたしかし、それは動作しませんでした。誰かが私を助けて、そのカウントがうまくいかなかった理由を説明できれば、とても嬉しく思っています。前もって感謝します!

EDIT:「フィルタ」と言うと、結果テーブルとして使用したいという意味です。最終的には2列のテーブルを としてください。1)characterid Severus Snape 2)characterid Quirinus Quirrell

ごめんなさい。また、私はSELECT文にcourseidを含めて、複数のコースをより明確に教える人を見てみましょう。最終表には、「characterid」、「firstname」、「lastname」の3つの列しかないはずです。

EDIT2:これはデータベースの構造です。それは皆さんに役立つことができるようたぶん私は完全に間違っている:構造

enter image description here

+0

? –

答えて

1

そのカウントが働かなかったのはなぜ?それが唯一のカウントので、あなたがグループcourseid、それぞれがcourseid、各 characteridのためにすべてのコースをカウントしていないので

はSOあなたは

SELECT 
    characterid, firstname, lastname 
FROM 
    Teaches 
NATURAL JOIN 
    Character 
GROUP BY 
    characterid, firstname, lastname 
HAVING 
    COUNT(*) > 1; 

に変更しなければならないと私はあなたがINNER JOIN代わりのNATURAL JOIN使用することをお勧め。 NATURAL JOINは標準ではなく、きれいではなく、コーダーには見えません(他の人はあなたがどの列に参加したいのかわからないので、読み込みできません)

そしてあなたのコメントによると、任意の年に1以上のコース、任意のポジション。あなたが使用する必要がありますあなたのケースのためにそう

(あなたはどの学校で取得したいならば、サブクエリでt.schoolidを削除):DBMSは、使用している

SELECT 
    characterid, firstname, lastname 
FROM 
    (
    SELECT DISTINCT 
     c.characterid, c.firstname, c.lastname, t.courseid, t.schoolid 
    FROM 
     Teaches t 
    INNER JOIN 
     Character c 
    ON 
     t.characterid = c.characterid 
    ) 
GROUP BY 
    characterid, firstname, lastname 
HAVING 
    COUNT(*) > 1; 
+0

こんにちは!あなたの迅速なフィードバックとヒントをありがとう。あなたが提案したように試してみましたが、結果は[Table2](http://i.imgur.com/9yRyE9d.png)です。私はそれを私たちの練習サーバーのソリューションとしてアップロードして、フィードバックが否定的であることを確認するために、 – djaru

+0

私の最初の投稿に構造を含めました。多分私は完全に間違って始めました[構造体](http://i.stack.imgur.com/R3LF6.png) – djaru

+0

@djaruテーブルに問題があるようですが、このクエリを実行して結果を表示できますか?: 'SELECT * FROM t INNER JOINあなたの返信によると、このクエリは1行以上を返す必要があります –

関連する問題