Discussion:
Please advice on a query
JORGE MALDONADO
2018-07-11 16:05:54 UTC
Permalink
I have a table more or less like this:

-----------------------------------------------------
crs_id some data req
-----------------------------------------------------
25 aaaaaaaa 21
25 aaaaaaaa 19
17 ccccccccc null
8 dddddddd null
19 eeeeeeee 15
19 xxxxxxxxx 37
15 fffffffffffffffff 10
10 gggggggg null

I need to delete rows according to the following criteria:

* Row with "crs_id = 25" must be deleted (only the second row) because "req
= 19" and there is a row with "crs_id = 19"

* Row with "crs_id = 19" must be deleted (only the first row) because "req
= 15" and there is a row with "crs_id = 15"

* Row with "crs_id = 15" must be deleted because "req = 10" and there is a
row with "crs_id = 10"

I have been struggling with this issue without a successful result.

Respectfully,
Jorge Maldonado
David G. Johnston
2018-07-11 16:16:46 UTC
Permalink
Post by JORGE MALDONADO
-----------------------------------------------------
crs_id some data req
-----------------------------------------------------
25 aaaaaaaa 21
25 aaaaaaaa 19
17 ccccccccc null
8 dddddddd null
19 eeeeeeee 15
19 xxxxxxxxx 37
15 fffffffffffffffff 10
10 gggggggg null
* Row with "crs_id = 25" must be deleted (only the second row) because
"req = 19" and there is a row with "crs_id = 19"
* Row with "crs_id = 19" must be deleted (only the first row) because "req
= 15" and there is a row with "crs_id = 15"
* Row with "crs_id = 15" must be deleted because "req = 10" and there is a
row with "crs_id = 10"
I have been struggling with this issue without a successful result.
​Maybe...

DELETE FROM tbl
WHERE EXISTS (SELECT 1 FROM tbl AS cmp WHERE tbl.req_id = cmp.crs_id)
​
That probably can be written with USING though I find that syntax a bit
hard to read personally. Might want to compare plans if performance
matters.

David J.

Loading...