跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • mysql 这种情况怎么查?
未分類
8 9 月 2020

mysql 这种情况怎么查?

mysql 这种情况怎么查?

資深大佬 : qaqLjj 1

mysql 这种情况怎么查?

如图,怎么查询同时掌握了第一张表所有技能的员工呢?

也就是说,希望的结果如下:

emp
神崎
相田

大佬有話說 (8)

  • 資深大佬 : liuxey

    select distinct emp from EmpSkills t1 where exists (select 1 from Skills t2 where t1.skill = t2.skill);
    随手写的,稍微改改应该能用

  • 資深大佬 : liuxey

    呃~,又没看清题目:
    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 表不能用重复数据

  • 主 資深大佬 : qaqLjj

    @liuxey 不行啊

  • 資深大佬 : AngryPanda

    使用 group_concat 曲线救国应该可以。

  • 資深大佬 : jindeq

    不推荐 sql 里写业务。
    要是真的写可以用子表。
    先把技能表每个技能标注成 s1,s2 等
    再把用户技能表 group by skill, user
    join 得到的两张表,on 的时候带上 skill 的条件

    如果 skill 太多,这样就不现实了,推荐代码里处理

  • 主 資深大佬 : qaqLjj

    昨天写出来了,忘记在这里更新了

  • 主 資深大佬 : qaqLjj

    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)
    )

  • 資深大佬 : Aksura

    如果是 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
    ;

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具