2017-02-13 31 views
-2

我有一个包含两列(教授和他们所教授的主题)和其他table2的tabl1。现在我试图找出所有可以教授表2中所有主题的教授。我尝试通过操作尝试加入和分组,并获得成功。但是我从朋友那里听说,我们可以使用除法运算符更有效地解决这个问题。我试过两天,没有运气。有人可以帮助我以任何其他方式如何做到这一点,或任何线索表示赞赏。从SQL中的表中获取已过滤的列

如: table1的

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

表2

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'的风格已被弃用[** 25年以上**](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,'') 
相关问题