Удалить из таблицы в sql с условием

#sql #sql-delete

#sql #sql-удалить

Вопрос:

У меня есть данные в таблице tab_asg , такие как :

 start_date  end_date       person_id
------------------------------------
19-08-2012  18-08-2012       1
19-08-2012  16-08-2016       1
17-08-2016  31-12-4712       1
  

Я хочу удалить первую строку из этой таблицы where end_date < start_date и первые две строки start_date одинаковы.

 delete from tab_asg
where end_date <start_date;
  

Я добавил условие end_date < start_date к своему запросу. Как я могу добавить 2-е условие, то есть 1-я из двух строк start_date одинакова?

Комментарии:

1. I want to delete first row from this table … вам нужно указать порядок для понятия «первая строка», чтобы оно имело какой-либо смысл.

2. @TimBiegeleisen — Спасибо, но то, что у меня есть, указывает на условие, какую строку мне нужно удалить, которая всегда будет первой строкой

3. Вы хотите удалить все строки, где end_date < start_date .??<br>Каково второе условие???

4. Нет первой строки без указания вами порядка.

5. Для какой СУБД это предназначено? Пожалуйста, добавьте тег, чтобы указать, используете ли вы mysql , postgresql , sql-server oracle или db2 — или что-то совсем другое.

Ответ №1:

Я думаю, что самый простой способ сделать это —

Сначала добавьте идентификатор столбца первичного ключа в таблицу и заполните его уникальными идентификаторами. В SQL Server это выглядело бы примерно так:

 ALTER TABLE tab_asg
ADD Id int NOT NULL IDENTITY(1,1)
  

Затем удалите соответствующие строки из таблицы

 DELETE FROM tab_asg 
WHERE Id IN 
(SELECT ta1.Id FROM tab_asg ta1 LEFT JOIN tab_asg ta2 
ON ta1.person_id = ta2.person_id AND ta1.start_date = ta2.start_date 
AND ta1.end_date < ta2.end_date WHERE ta2.end_date IS NOT NULL)