2

テーブル内の 1 つのフィールドに同じ値が含まれるすべての行を検索する SQL ステートメントを作成しようとしています。ただし、別の属性に対して異なる値を持つ行のみを返したいです。これを説明するのは少し難しいです。

スキーマを持つテーブル Teacher があります。

TeacherName varchar(50)
CourseN     int
Quarter     varchar(50)

3 つのフィールドを組み合わせて主キーを構成するため、クォーターが異なれば、同じ教師が同じコースを教えることができます。私が解決しようとしている問題は、少なくとも 2 つの異なるコース (四半期に関係なく) を教えるすべての教師の (異なる) 名前を返すにはどうすればよいかということです。

これは研究室のためのもので、私はこの問題を約 1 週間解決しようとしてきましたが、まったく理解できないので、ここに来ることにしました。前の質問では、同じコースを少なくとも 2 回教えている教師の名前の個別のリストを見つけるように求められました。私はこれを思いつきました:

SELECT DISTINCT [TeacherName] 
FROM            [Teacher]
GROUP BY        [TeacherName], 
                [CourseN] 
HAVING   COUNT( [CourseN] ) >= 2

しかし、私が今解決しようとしている問題は似ていますが、少なくとも 2 つの異なるコースを教えているテーブルに複数回現れる教師だけが必要です。データベースが何をしているかを正確に理解することが重要なので、答えだけでなく、いくつかのガイダンスも本当に感謝しています。

4

1 に答える 1

3

この場合、特に「四半期に関係なく」できる場合は、DISTINCT という単語を使用しなくても個別のリストを取得できるはずです。基本的に、一意の教師とコース番号の組み合わせごとに 1 行のサブクエリ テーブルに 2 行以上ある教師が必要です。

select TeacherName
from (
    select TeacherName, CourseN
    from Teacher
    group by TeacherName, CourseN
    ) t1
group by TeacherName
having count(*) >=2
于 2012-04-17T04:07:08.987 に答える