
如图,怎么查询同时掌握了第一张表所有技能的员工呢?
也就是说,希望的结果如下:
emp
神崎
相田
|  |      1liuxey      2020-09-06 22:00:36 +08:00 select distinct emp from EmpSkills t1 where exists (select 1 from Skills t2 where t1.skill = t2.skill); 随手写的,稍微改改应该能用 | 
|  |      2liuxey      2020-09-06 22:03:31 +08:00 呃~,又没看清题目: select emp from EmpSkills t1 where exists (select 1 from Skills t2 where t1.skill = t2.skill) group by t1.emp having count(*) > 3 缺点是要事先知道一共有几个 skill 和 EmpSkills 表不能用重复数据 | 
|  |      4AngryPanda      2020-09-07 06:24:27 +08:00 via Android 使用 group_concat 曲线救国应该可以。 | 
|  |      5jindeq      2020-09-07 08:51:56 +08:00 via Android 不推荐 sql 里写业务。 要是真的写可以用子表。 先把技能表每个技能标注成 s1,s2 等 再把用户技能表 group by skill, user join 得到的两张表,on 的时候带上 skill 的条件 如果 skill 太多,这样就不现实了,推荐代码里处理 | 
|      6MarkLazy OP 昨天写出来了,忘记在这里更新了 | 
|      7MarkLazy OP SELECT DISTINCT emp FROM EmpSkills ES1 WHERE NOT EXISTS ( SELECT skill FROM Skills sk WHERE NOT EXISTS (SELECT skill FROM EmpSkills ES2 WHERE ES1.emp = ES2.emp AND ES2.skill = sk.skill) ) | 
|  |      8Aksura      2020-09-08 13:01:40 +08:00 如果是 8.0 直接分析函数就可以了。如果是 8.0 以前的版本,可以这样: SELECT a.emp FROM ( SELECT e.emp , COUNT(DISTINCT s.skill) AS cnt FROM EmpSkills e JOIN Skills s ON s.skill = e.skill GROUP BY e.emp ) a JOIN (SELECT COUNT(DISTINCT s.skill) AS cnt FROM Skills s ) b ON b.cnt = a.cnt ; |