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

Sql query to join 2 tables and count the values matching and non matching rows

我有两个表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;

department 中的 empidemployee 中的 empid 不匹配是 数据建模问题 .您应该具有从 departmentemployee 的外键关系,以确保永远不会发生这种情况。您的数据库缺乏关系完整性。

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

你可以使用 UNION ALL

参见:here

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

参见:here