【问题标题】:Display all employees working on all of the projects?显示从事所有项目的所有员工?
【发布时间】:2014-03-02 11:15:03
【问题描述】:

表 1 包括员工姓名和姓名缩写 表 2 包括 projectnumber 和 pmember(也是首字母)

我们只需要显示员工的姓名,所以我必须使用 WHERE 子句,但我无法构造 :( 这是我到目前为止所做的。它只返回 1 名员工(正确答案是 2 名员工)

select t1.name
from t1
where t1.initials IN (select t2.pmember
                     from t2
                     having count(t2.projectnumber) > 1)

提前致谢!

【问题讨论】:

  • 你为什么使用having?如果你使用它,你必须有一个group by
  • having count(t2.projectnumber) > 1 ?
  • 你想做什么?
  • 这是您的查询?您想为哪个员工打印工作?
  • 如果他们对您有所帮助,请记住将其中一个答案标记为“已接受”。

标签: mysql sql where clause


【解决方案1】:
select t1.name
from t1
left join t2 on t1.initials = t2.pmember
group by t1.name
having sum(t2.projectnumber is null) = 0

【讨论】:

    【解决方案2】:

    此查询应为您提供参与所有项目的成员的姓名:

    SELECT T1.NAME
      FROM T1
      JOIN T2 ON T1.INITIALS = T2.PMEMBER
     GROUP BY T1.NAME
    HAVING COUNT(T2.PROJECTNUMBER) = (SELECT COUNT(1) FROM T2 T2ALIAS)
    

    【讨论】:

      【解决方案3】:

      也许这个查询对你有帮助:

      SELECT T1.NAME 
      FROM T1 
      INNER JOIN T2 ON T1.INITIALS = T2.PMEMBER 
      HAVING COUNT(T2.PROJECTNUMBER) > 1
      

      【讨论】:

        【解决方案4】:

        要显示适用于所有项目的所有 emp,我认为您需要这样的不同计数:

        SELECT NAME FROM T1 WHERE INITIALS IN ( 
                 SELECT PMEMBER FROM T2 HAVING DISTINCT COUNT(PROJECTNUMBER) = (
                     SELECT DISTINCT COUNT(PROJECTNUMBER) FROM T2)
                 GROUP BY PMEMBER)
        

        【讨论】:

        • 如果他想展示参与所有项目的成员?你确定??
        • 我只需要返回员工的姓名,这样我就不必使用 JOIN 子句了,对吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多