Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sql从计数正好为2的多个表中选择值_Mysql_Sql_Join - Fatal编程技术网

Mysql Sql从计数正好为2的多个表中选择值

Mysql Sql从计数正好为2的多个表中选择值,mysql,sql,join,Mysql,Sql,Join,如果emp_no(员工编号)在dept_emp中正好存在2次,我将尝试从员工数据库中获取名字和姓氏 员工数据库包括:员工、部门、部门经理、部门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

如果emp_no(员工编号)在dept_emp中正好存在2次,我将尝试从员工数据库中获取名字和姓氏

员工数据库包括:员工、部门、部门经理、部门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
来自部门emp的示例,其中第一个值为emp编号:

(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)
部门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\u no在dept\u emp中正好出现两次,则缺少一个
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

“期望输出:如果emp\u no在dept\u emp中正好出现两次,那么名字和姓氏”您是指两个不同的emp\u no编号还是无关紧要?@srp1908您可能需要使用
HAVING COUNT(DISTINCT dm.emp\u no)=2
if
dm.emp\u no
需要是唯一的。@RaymondNijland我认为OP是在寻找那些特定的
emp\u no
dept\emp
表中完全重复的情况。“如果emp编号(员工编号)在部门emp中正好存在2次。”