其他表中不存在mysql

时间:2015-01-14 07:23:13

标签: mysql sql

我的emp表是这样的

+------+------------+
| emp  | emp_status |
+------+------------+
| 001  | w          |
| 002  | nw         |
| 003  | w          |
| 004  | w          |
+------+------------+

和薪水表是

+------+------------+
| emp  | month      |
+------+------------+
| 001  | Dec2013    |
| 002  | Dec2013    |
| 003  | Dec2013    |
| 004  | Dec2013    |
| 001  | Jan2014    |
| 002  | Jan2014    |
| 003  | Jan2014    |
| 004  | Jan2014    |
| 001  | Feb2014    |
| 004  | Feb2014    |
+------+------------+

所以对于2014年2月这个月我想得到没有报酬的人

+------+------------+
| emp  | emp_status |
+------+------------+
| 003  | w          |
+------+------------+

我试过

SELECT * FROM emp WHERE NOT EXISTS (SELECT emp FROM salary where month_sal ='Feb2014')

我想使用emp_status(' w')以及......任何提示......

2 个答案:

答案 0 :(得分:1)

您错过了将where中的EXISTS子句连接到外部查询,如下所示:

SELECT * FROM emp 
WHERE NOT EXISTS 
(
    SELECT NULL 
    FROM salary 
    where salary.month_sal ='Feb2014'
    AND salary.emp=emp.emp
)
AND emp.emp_status='w'

您开始撰写的内容看起来像IN。你也可以这样做:

SELECT * FROM emp 
WHERE NOT emp.emp IN 
(
    SELECT salary.emp 
    FROM salary 
    where salary.month_sal ='Feb2014'
)
AND emp.emp_status='w'

答案 1 :(得分:0)

以下内容应该有效:

SELECT * 
FROM emp
WHERE emp_status = 'w'
  AND emp NOT IN (SELECT emp FROM emp WHERE month_sal ='Feb2014')

如果字段名称与表名相同,看起来有些奇怪,但希望这是正确的。