首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有两个表的mysql count(),不要重复超过2行

带有两个表的mysql count(),不要重复超过2行
EN

Stack Overflow用户
提问于 2020-06-05 22:18:56
回答 3查看 62关注 0票数 0

我有两张桌子。

  1. Table: employees

  1. Table: employee_roles

我想给出所有员工的名单,如果他们的employee_id不超过2或相等的话。我是说像这样的东西我需要展示:

我如何进行查询?我使用了这个查询,但它不起作用。也有条件名称,如'%‘。

代码语言:javascript
复制
SELECT COUNT(id_employee), name 
FROM employees
WHERE name LIKE '%' AND id_employee NOT IN
(SELECT employee_id
FROM employee_roles);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-05 22:28:05

如果希望员工具有一个角色,则可以使用聚合:

代码语言:javascript
复制
select id_employee
from employee_roles
group by id_employee
having count(*) = 1;

如果希望员工角色为0或1,则需要使用left join引入没有角色的员工。

代码语言:javascript
复制
select e.id_employee, e.name
from employees e left join
     employee_roles er
     on e.id_employee = er.id_employee
group by e.id_employee, e.name
having count(er.id_employee) <= 1;

如果要对它们进行计数,请使用子查询:

代码语言:javascript
复制
select count(*)
from (select e.id_employee, e.name
      from employees e left join
           employee_roles er
           on e.id_employee = er.id_employee
      group by e.id_employee, e.name
      having count(er.id_employee) <= 1
     ) e
票数 1
EN

Stack Overflow用户

发布于 2020-06-05 22:28:06

尝试以下几点

使用left join的第一个选项

代码语言:javascript
复制
select
    name
from
(
    select 
      id_employee, 
      name
  from employees e 
  left join employee_roles er
  on e.id_employee = er.employee_id
  group by 
      id_employee, 
      name
  having count(employee_id) <= 1
) val

第二种选择是使用union all

代码语言:javascript
复制
select
    name
from employees e
where not exists (
    select 
        employee_id
    from employee_roles er
    where e.id_employee = er.employee_id
)

union all

select
    name
from employee_roles er
join employees e
on e.id_employee = er.employee_id
group by 
    name
having count(employee_id) = 1

产出:

代码语言:javascript
复制
| name  |
| ----- |
| Poul  |
| Erick |
| Joy   |
| Smith |
票数 1
EN

Stack Overflow用户

发布于 2020-06-05 22:28:51

您需要加入这些表,然后使用COUNT(*)GROUP BY。然后,您可以检查计数是否为1,以筛选出具有多个角色的员工。

代码语言:javascript
复制
SELECT name
FROM employees AS e
JOIN employee_roles AS r ON e.id_employee = r.id_employee
GROUP BY e.id_employee
HAVING COUNT(*) = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62224891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档