slimguy
asked on
MS SQL Syntax
I am trying to delete orphan records where the parent has been deleted (there is no FK defined).
This works:
select * from tblBVMeterReadingErrors a where not exists (Select 0 from tblBVMeterReadings b
where a.BV_Meter_Reading_ID = b.BV_Meter_Reading_ID);
But this doesn't:
delete from tblBVMeterReadingErrors a where not exists (Select 0 from tblBVMeterReadings b
where a.BV_Meter_Reading_ID = b.BV_Meter_Reading_ID);
What is wrong please?
This works:
select * from tblBVMeterReadingErrors a where not exists (Select 0 from tblBVMeterReadings b
where a.BV_Meter_Reading_ID = b.BV_Meter_Reading_ID);
But this doesn't:
delete from tblBVMeterReadingErrors a where not exists (Select 0 from tblBVMeterReadings b
where a.BV_Meter_Reading_ID = b.BV_Meter_Reading_ID);
What is wrong please?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Select * from tblBVMeterReadingErros
where bv_meterReading_ID not in (Select bv_MeterReadingID from tblBVMeterReading)
Delete from tblBVMeterReadingErros
where bv_meterReading_ID not in (Select bv_MeterReadingID from tblBVMeterReading)
The above code should work.
Tom
ButlerTechnology, this is exactly my solution. I just only add a filter to avoid NULL values which some times could cause problems in comparisions inside the NOT IN.
this should do it for you check you are getting the correct results with the select before using the delete
select * from tblBVMeterReadingErrors where not in(Select 0 from tblBVMeterReadings
where tblBVMeterReadingErrors .BV_Meter_Reading_ID = tblBVMeterReadings.BV_Meter_Reading_ID);
delete from tblBVMeterReadingErrors where not in(Select 0 from tblBVMeterReadings
where tblBVMeterReadingErrors .BV_Meter_Reading_ID = tblBVMeterReadings.BV_Meter_Reading_ID);
ASKER
Many thanks, I should have seen that myself - got a mental block last night!
Open in new window