Обсуждение: Please advice on a query

Поиск
Список
Период
Сортировка

Please advice on a query

От
JORGE MALDONADO
Дата:
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

Re: Please advice on a query

От
"David G. Johnston"
Дата:
On Wed, Jul 11, 2018 at 9:05 AM, JORGE MALDONADO <jorgemal1960@gmail.com> wrote:
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.


​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.