选择同一表的另一列中不存在的值,MySQL Database not Exists子句

选择同一表的另一列中不存在的值,MySQL Database not Exists子句,mysql,database,exists,Mysql,Database,Exists,我在这里要做的是选择prev_contract_id列中不存在的所有contract_id,并且结束日期早于某个日期 这是我的数据库表,名为contract,其值位于 (合同id、合同类型、开始日期、结束日期、上一个合同id、员工id)列 这是我的SQL语句 select contract_id from contract where not exists(select prev_contract_id from contract where prev_contract_id <>

我在这里要做的是选择prev_contract_id列中不存在的所有contract_id,并且结束日期早于某个日期

这是我的数据库表,名为contract,其值位于 (合同id、合同类型、开始日期、结束日期、上一个合同id、员工id)列

这是我的SQL语句

select contract_id from contract 
where not exists(select prev_contract_id from contract where prev_contract_id <> 'null') 
and end_date < '2014-05-05';
返回我
co-0000001
co-0000003
co-0000006
。 我想从选择中删除
co-0000001
,只返回我co-0000003和co-0000006


当我单独运行它们时,它可以工作,但是当我使用
NOT EXISTS
子句将它们组合在一起时,我无法得到结果。我不想在中使用
,因为我听说它更耗时或效率低下。

您使用的
不存在
运算符错误。此运算符意味着,对于外部select语句中的每一行,都会计算内部select,并且只有当它不返回任何行时,才会返回外部查询中的行

如果检查正在使用的内部查询:

select prev_contract_id from contract where prev_contract_id <> 'null'

提供您的表结构检查列数据类型,并通过将“not exists”替换为“not in”进行检查,然后检查结果哦,我明白了。非常感谢。
select prev_contract_id from contract where prev_contract_id <> 'null';
select contract_id from contract where end_date < '2014-05-05';
select prev_contract_id from contract where prev_contract_id <> 'null'
SELECT contract_id 
FROM   contract a
WHERE  NOT EXISTS(SELECT prev_contract_id 
                  FROM   contract b
                  WHERE  b.prev_contract_id <> 'null' AND
                         b.prev_contract_id = a.contract_id -- The missing relationship
                 ) AND
       end_date < '2014-05-05';