【问题标题】:Sql query to join 2 tables and count the values matching and non matching rowsSql查询连接2个表并计算匹配和不匹配行的值
【发布时间】:2021-02-23 11:31:12
【问题描述】:

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

【问题讨论】:

  • 联合所有,按结果分组。
  • 嘿@jarlh,我也试过了,但没有用。我添加了游乐场

标签: mysql sql join outer-join


【解决方案1】:

你可以使用 UNION ALL

见:here

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

见:here

【讨论】:

    【解决方案2】:
    select empid, count(empid)
    from (
          select empid from employee 
          union all
          select empid from department
         ) e
    group by empid;
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 Tips for Quality Answers
    【解决方案3】:

    这是一个相当奇怪的数据模型。但是使用union all 然后group by

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

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

    【讨论】:

    • 这只是一个场景,sum1 问我,我正在尝试。我试图使用外部连接,但没有成功
    • 有没有办法使用外连接?
    • @HeenaTabassum 。 . .不在 MySQL 中。这需要full join。这回答了您在此处提出的问题。如果您有其他问题,请将其作为问题提出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多