SQL查询联接2个表并计算匹配行和不匹配行的值

问题描述

我有两个表Employee和Department。我想编写一个查询,该查询可以为我提供来自两个表的数据以及值的计数。

    create table Employee(EmpID text);
    insert into Employee values("A");
    insert into Employee values("B");
    insert into Employee values("C");
    create table Departments(EmpID text);
    insert into Departments values("B");
    insert into Departments values("C");
    insert into Departments values("D");

输出

| EMP_ID    | COUNT     |
|--------   |-------    |
| A         | 1         |
| B         | 2         |
| C         | 2         |
| D         | 1         |

到处搜索,但没有找到任何有用的信息。 这是游乐场https://paiza.io/projects/TdkdHannoclhbevdqpFlKw?language=mysql

下面是我正在尝试的查询,它使用完整的外部联接,因为它提供了所有匹配和不匹配的行

SELECT *FROM Employee outer join Departments on Employee.EmpID=Departments.EmpID

解决方法

这是一个非常奇怪的数据模型。但是先使用&&,然后使用union all

group by

您在select empid,count(*) from (select empid from employee union all select empid from department ) e group by empid; 中拥有empiddepartment中的empid不匹配是数据建模问题。您应该具有从employeedepartment的外键关系,以确保永远不会发生这种情况。您的数据库缺乏关系完整性。

,
select empid,count(empid)
from (
      select empid from employee 
      union all
      select empid from department
     ) e
group by empid;
,

您可以使用UNION ALL

请参阅:here

或者您可以查看(临时)合并表

请参阅:here