【问题标题】:Select all data from multiple table ON same field value从多个表中选择相同字段值的所有数据
【发布时间】:2020-06-21 04:16:57
【问题描述】:

这是我的数据库表的样子:

regular_employee:

+----+---------------+-----------------+-----------+----------------+
| id | employee_name | employee_job    | join_date | permanent_date |
+----+---------------+-----------------+-----------+----------------+
|  1 | ZELDA         | ACCOUNTANT      | 2020/02   | 2020/03        |
|  2 | YUGO          | QA              | 2020/02   | 2020/04        |
|  3 | XAVIER        | GENERAL MANAGER | 2020/02   | 2020/05        |
|  4 | WAVY          | FACTORY MANAGER | 2020/01   | 2020/02        |
+----+---------------+-----------------+-----------+----------------+

合同雇员:

+----+---------------+--------------+-----------+
| id | employee_name | employee_job | join_date |
+----+---------------+--------------+-----------+
|  1 | ANTONIO       | ACCOUNTANT   | 2020/01   |
|  2 | BAGGIO        | ENGINEER     | 2020/02   |
|  3 | CHARLES       | QA           | 2020/02   |
|  4 | DAVID         | QA           | 2020/02   |
+----+---------------+--------------+-----------+

我的目标: 选择 2020/02 年加入公司的所有员工职位,并按员工职位区分/分组

我尝试过的:

SELECT re.employee_job,ce.employee_job 
FROM regular_employee AS re,contract_employee AS ce 
WHERE re.join_date = '2020/02' AND ce.join_date = '2020/02' 
GROUP BY re.employee_job,ce.employee_job

结果是:

+-----------------+--------------+
| employee_job    | employee_job |
+-----------------+--------------+
| ACCOUNTANT      | ENGINEER     |
| ACCOUNTANT      | QA           |
| GENERAL MANAGER | ENGINEER     |
| GENERAL MANAGER | QA           |
| QA              | ENGINEER     |
| QA              | QA           |
+-----------------+--------------+

我所期待的:

+-----------------+
| employee_job    |
+-----------------+
| ACCOUNTANT      |
| ENGINEER        |
| GENERAL MANAGER |
| QA              |
+-----------------+

这个查询怎么做?

【问题讨论】:

    标签: mysql join union multiple-tables


    【解决方案1】:

    联合查询在这里可能更有意义:

    SELECT employee_job FROM regular_employee WHERE join_date = '2020/02'
    UNION
    SELECT employee_job FROM contract_employee WHERE join_date = '2020/02';
    

    UNION 默认情况下会删除可能出现在两个表中的一个/两个中的重复作业。

    【讨论】:

    • 这正是我一直在寻找的,感谢您的帮助,但是,我想知道为什么这可以完美地工作,而这两个表有不同数量的字段?
    • @owf UNION 删除所有重复项,这就是您获得预期输出的原因。
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多