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