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
中的 empid
与 employee
中的 empid
不匹配是 数据建模问题 .您应该具有从 department
到 employee
的外键关系,以确保永远不会发生这种情况。您的数据库缺乏关系完整性。
select empid, count(empid)
from (
select empid from employee
union all
select empid from department
) e
group by empid;
你可以使用 UNION ALL
参见:here
或者您可以查看(临时)合并表
参见:here
我有两个表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
中的 empid
与 employee
中的 empid
不匹配是 数据建模问题 .您应该具有从 department
到 employee
的外键关系,以确保永远不会发生这种情况。您的数据库缺乏关系完整性。
select empid, count(empid)
from (
select empid from employee
union all
select empid from department
) e
group by empid;
你可以使用 UNION ALL
参见:here
或者您可以查看(临时)合并表
参见:here