请教一条SQL查询语句,谢谢!

qq_22264283 2023-07-28 16:34:12

我用的是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都存在的时候,才将其取出来。

不知道把需求描述清楚没有,谢谢!

 

 

 

...全文
253 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
炎同学要努力 2023-08-17
  • 打赏
  • 举报
回复

学习了

屋檐里的猫 2023-08-03
  • 打赏
  • 举报
回复 1

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)

Williamtym 2023-07-28
  • 打赏
  • 举报
回复

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表进行连接,取出所有符合条件的记录。
也不知道理解对没

qq_22264283 2023-07-28
  • 举报
回复
@Williamtym 谢谢!有个两问题:一是TeaP表中没有STUID这个字段,所以,第一个WHERE后面跟的条件就不正确了;二是TeaP表中的数据不一定是连续的,我举的例子刚好是1和2连续的,有可能是1、3和4。
qq_22264283 2023-07-28
  • 举报
回复
@Williamtym 你的思路是正确的,语句这样写,我测试了下,结果是正确的:SELECT STUID FROM JG WHERE STTH IN (SELECT STTH FROM TeaP) GROUP BY STUID HAVING COUNT(DISTINCT STTH) = (SELECT COUNT(*) FROM TeaP)
Williamtym 2023-07-28
  • 举报
回复
@qq_22264283 okok
qq_22264283 2023-07-28
  • 打赏
  • 举报
回复

谢谢!
但是inner join完成不了这个查询 吧?!

wanby1982 2023-07-28
  • 打赏
  • 举报
回复

inner join研究下

34,623

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧