【问题标题】:Find all rows with no matching result SQL查找所有没有匹配结果 SQL 的行
【发布时间】:2013-01-02 17:01:04
【问题描述】:

我有一个表,其中包含我公司员工的名字和姓氏,以及一个确定他们是否仍在公司工作的字段。

我有另一个表,其中包含员工的任务列表 - 它还包含两个字段,其中包含员工的名字和姓氏(- 是的,我知道这不是一个好的结构)。

我希望能够使用 MySQL 查询找到仍在公司工作但没有任务的所有员工。

有什么想法吗?

【问题讨论】:

  • 两个表是否都与任何键相关
  • 显然名字和姓氏是他们的关键。
  • 它们是相关的 - 与名字和姓氏字段有关。值得一提的是,我在员工表中大约有 43,000 行,在任务表中大约有 55,000 行

标签: mysql select join left-join


【解决方案1】:
SELECT *
FROM employees
WHERE still_working_for_company
AND NOT EXISTS (
  SELECT TRUE
  FROM tasks
  WHERE tasks.firstname = employees.firstname
  AND tasks.lastname = employees.lastname
)

【讨论】:

    【解决方案2】:

    你可以试试这个--

    select * from FirstTable where firstTable.employee='yes' and 
         firstTable.empid IN (select secondTbl.empId where firstTable.empid = secondTbl.empId)
    

    查询未经过测试,并假定您的第二个表(任务表)仅在分配任务时才包含员工数据。

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT e.* 
      FROM emp e 
      LEFT JOIN emptask et ON e.firstname = et.firstname AND e.lastname = et.lastname 
      WHERE e.stillworks = 'y' AND et.taskid IS NULL 
      GROUP BY e.firstname, e.lastname
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        相关资源
        最近更新 更多