从SQL中的表中获取Filtered列

时间:2017-02-13 20:27:18

标签: sql relational-division

我有一个tabl1,有两列(教授和他们教授的科目)和其他table2。现在我试图找出能够教授表2中所有主题的所有教授。我通过操作尝试了Join和Group并成功完成了它。但我从朋友那里听说我们可以使用除法运算符更有效地解决这个问题。我试着过去两天,没有运气。有人可以帮助我以任何其他方式做到这一点或任何线索被赞赏。

例如: table1

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

表2

S1
S3

期望的输出:

C,B

2 个答案:

答案 0 :(得分: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,'')

答案 1 :(得分:-1)

您能否共享表格结构,以便我们更清楚地了解整体情况?

你可能会觉得这很有用:加入的例子,

表1(SubjectId,SubjectLabel)

表2(TeacherId,TeacherName,SubjectId)

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