【问题标题】:Sql selecting values from multiple tables where count is exactly 2Sql 从计数正好为 2 的多个表中选择值
【发布时间】:2019-03-08 23:22:28
【问题描述】:

如果 emp_no(员工编号)在 dept_emp 中恰好存在 2 次,我正在尝试从员工数据库中获取 first_name 和 last_name。

员工数据库包括:员工、部门、dept_manager、dept_emp、职称、薪水。

USE employees;
SELECT emps.first_name,emps.last_name
FROM employees emps INNER JOIN
 employees.dept_emp dm
 ON emps.emp_no = dm.emp_no INNER JOIN
 employees.titles t
 ON t.emp_no = emps.emp_no INNER JOIN
 employees.departments d
 ON d.dept_no = dm.dept_no
 HAVING COUNT(dm.emp_no) = 2

来自 dept_emp 的示例,其中第一个值为 emp_no :

(10045,'d004','1996-11-16','9999-01-01'),
(10046,'d008','1992-06-20','9999-01-01'),
(283344,'d001','1996-05-08','1997-11-25'),
(283344,'d009','1997-11-25','9999-01-01'),

员工表:

CREATE TABLE employees (
emp_no      INT             NOT NULL,
birth_date  DATE            NOT NULL,
first_name  VARCHAR(14)     NOT NULL,
last_name   VARCHAR(16)     NOT NULL,
gender      ENUM ('M','F')  NOT NULL,    
hire_date   DATE            NOT NULL,
PRIMARY KEY (emp_no)

dept_emp 表:

CREATE TABLE dept_emp (
emp_no      INT             NOT NULL,
dept_no     CHAR(4)         NOT NULL,
from_date   DATE            NOT NULL,
to_date     DATE            NOT NULL,
FOREIGN KEY (emp_no)  REFERENCES employees   (emp_no)  ON DELETE CASCADE,
FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE,
PRIMARY KEY (emp_no,dept_no)

所需的输出:如果 emp_no 在 dept_emp 中恰好出现两次,则为 first_name 和 last_name

【问题讨论】:

  • “期望的输出:如果 emp_no 在 dept_emp 中恰好出现两次,则为 first_name 和 last_name”你的意思是两个不同的 emp_no 编号还是无关紧要?

标签: mysql sql join


【解决方案1】:

您缺少GROUP BY 子句。

SELECT emps.first_name,emps.last_name
FROM employees emps 
INNER JOIN dept_emp dm
  ON emps.emp_no = dm.emp_no 
GROUP BY dm.emp_no, emps.first_name, emps.last_name
  HAVING COUNT(dm.emp_no) = 2

【讨论】:

  • @srp1908 如果dm.emp_no 需要是唯一的,您可能需要使用HAVING COUNT(DISTINCT dm.emp_no) = 2..
  • @RaymondNijland 我认为 OP 正在寻找特定 emp_nodept_emp 表中完全重复的情况。 “如果 emp_no(员工编号)在 dept_emp 中恰好存在 2 次。”
猜你喜欢
  • 2016-12-22
  • 1970-01-01
  • 2013-06-23
  • 2010-11-19
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多