我有2张桌子,如下
`mysql> describe employees;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int(11) | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | NO | | NULL | |
| last_name | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
mysql> describe salaries;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| emp_no | int(11) | NO | PRI | NULL | |
| salary | int(11) | NO | | NULL | |
| from_date | date | NO | PRI | NULL | |
| to_date | date | NO | | NULL | |
+-----------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)`
考虑到每个员工都必须得到薪水的事实,我期望行数
工资表中的工资表与雇员中的工资表相同,因此雇员中所有emp_no
也是薪水。但是在执行Count语句时,我看到以下结果。
`mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from salaries;
+----------+
| count(*) |
+----------+
| 2844047 |
+----------+
1 row in set (0.00 sec)
这表明员工人数很少,但工资却少了,所以我做到了
在下面的查询中查找是否有。
`mysql> select * from employees where emp_no not in (select emp_no from salaries) ;
Empty set (0.96 sec)`
emp_no作为主键是唯一的,所以为什么两个表中的行数不同,
即使以上结果在我使用not in查询时返回空集。
我还在员工中发现了一些相同的名字,但是hire_date不同,但是emp_no
对他们来说是不同的。
`mysql> select * from employees where first_name='Zvonko' and last_name='Perko';
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 20909 | 1961-04-24 | Zvonko | Perko | F | 1990-12-14 |
| 488633 | 1961-08-01 | Zvonko | Perko | F | 1995-08-08 |
+--------+------------+------------+-----------+--------+------------+
我要去哪里错了?有人可以让我知道。
最佳答案
您的薪水表比雇员表具有更多的行。约三百万对三十万。
薪水表有一个由两部分组成的主键,这意味着一个雇员可能有多个不同的from_date薪水。你知道,为了加薪和东西。
关于mysql - 在薪水表中查找失踪雇员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27091987/