2017-02-13 5 views
-2

私は、2つのカラム(教授とそれらが教える科目)と他のテーブル2を持つtabl1を持っています。今、私はtable2のすべての科目を教えることができるすべての教授を見つけようとしています。私はJoinとGroupを操作で試してみました。しかし私は、私の友人から、除算演算子を使ってこの問題をさらに効率的に解決できることを聞いた。私は過去2日間、運がないから試しています。何か他の方法でそれをする方法で私を助けることができるか何か手がかりが評価されます。SQLのテーブルからフィルタリングされたカラムを取得

例:TABLE1

Prof Subject 
A  S1 
A  S4 
B  S1 
B  S3 
C  S1 
C  S2 
C  S3 

table2の

S1 
S3 

所望の出力:

C,B 
+1

サンプルデータと望ましい結果を入力してください。 – GurV

+1

SQLに除算演算子はありません。追加したリレーショナル部門タグを参照すると、これをSQLで表現する方法が見つかります。 –

答えて

-1

我々はより明確に大きな絵を持っているので、あなたがテーブル構造を共有することはできますか?

あなたは多分これは参考になりまし見つける:の例は参加し、

表1(SubjectId、SubjectLabel)

表2(TeacherId、TeacherName、SubjectId)

SELECT TeacherName, SubjectLabel FROM Table1, Table2 WHERE Table1.SubjectId = Table2.SubjectId 
+1

このスタイルのJOINは、[** over 25 years **](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)では廃止されました。代わりに明示的な 'JOIN'構文を使用してください。カンマは 'FROM'節に決して*置かないでください。また、これはOPの質問に答えるものではなく、最高でも明確にするためのコメントです。 – Siyual

0
SELECT 
    Prof 
FROM Table1 
INNER JOIN Table2 
    ON [Table1].[Subject] = [Table2].[Subject] 
GROUP BY [Table1].Prof 
HAVING COUNT(*) (SELECT COUNT(*) FROM Table2) 

この意志をすべてのエントリを持っている教授のリストをすべて表示します。同じ行に結果が必要な場合は、値を連結してください。

DECLARE @Result VARCHAR(MAX) = '' 
SELECT @Result = @Result + ',' + Prof 
FROM Table1 
INNER JOIN Table2 
    ON [Table1].[Subject] = [Table2].[Subject] 
GROUP BY [Table1].Prof 
HAVING COUNT(*) = (SELECT COUNT(*) FROM Table2) 

SELECT STUFF(@Result,1,1,'') 
関連する問題