34,497
社区成员




我用的是MS SQL SERVER 2014,数据库里面有两个表,一个表名是JG,一个表名是TeaP
JG表如下 :
STUID STTH
----- -----------
01 1
01 3
01 4
01 5
01 7
01 8
02 1
02 2
02 4
02 5
TeaP表如下:
STTH
-----------
1
2
求一条SQL语句,从STUID表中查询出STUID值为02的数据,因为对于TeaP表中STTH的1和2,在JG表中,只有02这个STUID对应的1和2都有,所以取出它;
也就是说,对应TeaP中的每一行值,对于JG表中STUID都存在的时候,才将其取出来。
不知道把需求描述清楚没有,谢谢!
学习了
SELECT jg.STUID, jg.STTH
FROM JG jg
INNER JOIN TeaP tp ON jg.STTH = tp.STTH
GROUP BY jg.STUID, jg.STTH
HAVING COUNT(DISTINCT tp.STTH) = (SELECT COUNT(*) FROM TeaP)
SELECT * FROM TeaP WHERE STUID = ( SELECT STUID FROM Jg WHERE STTH IN (1, 2) GROUP BY STUID HAVING COUNT(DISTINCT STTH) = 2 )
这个查询语句的逻辑是:首先在JG表中找出STTH为1或2的记录,对于每个STUID,如果它同时对应了1和2这两个STTH值,则将其作为结果返回。最后,将结果与TeaP表进行连接,取出所有符合条件的记录。
也不知道理解对没
谢谢!
但是inner join完成不了这个查询 吧?!
inner join研究下