首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表中找到至少在这些技术[reactjs,mysql,express]上工作过的人。

从表中找到至少在这些技术[reactjs,mysql,express]上工作过的人。
EN

Stack Overflow用户
提问于 2019-02-09 06:41:30
回答 2查看 110关注 0票数 0

我有一张表格,里面有名字和技术字段。

代码语言:javascript
复制
-----------------------------
|name       | technologies  |
-----------------------------
|shashin    | reactjs       |
-----------------------------
|shashin    | mysql         |
-----------------------------
|krupali    | express       |
-----------------------------
|paras      | mysql         |
-----------------------------
|shashin    | express       |
-----------------------------
|paras      | php           |
-----------------------------
|krupali    | php           |
-----------------------------
|shashin    | php           |
-----------------------------

我想找到至少在所有这些技术中工作过的人的名字,mysql,express。

输出:

代码语言:javascript
复制
-------------
|name       |
-------------
|shashin    |
-------------
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-09 06:53:13

你可以试着像下面这样做。

代码语言:javascript
复制
select name from TableName
group by name
having count(distinct technologies) > 2

如果您想要使用特定的技术,可以尝试如下所示。

代码语言:javascript
复制
 select name from TableName
 where technologies in('reactjs', 'mysql', 'express')
 group by name
 having count(distinct technologies) > 2
票数 7
EN

Stack Overflow用户

发布于 2019-07-04 13:58:31

接受的答案很好,但我更喜欢

代码语言:javascript
复制
  SELECT name 
    FROM table_name
   WHERE technologies IN ('reactjs', 'mysql', 'express')
GROUP BY name
  HAVING COUNT(DISTINCT technologies) = 3

DISTINCT确保每个名称都有确切的3条记录,前提是它们匹配所有三种技术。任何其他技术都将被WHERE删除。

实际上,如果将唯一的复合索引放在原始表上的(name, technology)上,并且只允许每种技术为给定名称出现一次,则可以从上面的查询中删除DISTINCT technologies

代码语言:javascript
复制
  SELECT name 
    FROM table_name
   WHERE technologies IN ('reactjs', 'mysql', 'express')
GROUP BY name
  HAVING COUNT(*) = 3

作为附带说明,我很想将我的人员和技术分离到不同的表中,并将它们与第三个表连接在一起

  • person - idname,…
  • 技术- idname,…
  • person_technology - idperson_idtechnology_id

person_idtechnology_id作为相应表的外键,并在

  • 技术- name
  • person_technology - (person_id, technology_id)

那么您的查询就会变成

代码语言:javascript
复制
  SELECT p.id,
         p.name AS person, 
         t.name AS technology

    FROM person p

    JOIN person_technology pt
      ON pt.person_id = p.id

    JOIN technology t
      ON t.id = pt.technology_id
     AND t.name IN ('reactjs', 'mysql', 'express')

GROUP BY p.id, p.name
  HAVING COUNT(*) = 3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54603906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档