2016-12-02 3 views
1

У меня есть несколько строк в таблице с тем же number.Как удалить данные из SQL за исключением одной строки?

Как удалить все строки, кроме одной строки?

Я имею в виду следующее:

number 
1 2 
2 2 
3 2 
4 2 

Итак, мне нужно, чтобы удалить все строки, где число = 2, но оставить только одну строку, например: 1 2

+0

Существуют ли какие-либо другие столбцы, просто число? – jarlh

+0

Нет, есть любые столбцы – MisterPi

+0

Возможно, вы можете получить полезную информацию по этой ссылке: http://stackoverflow.com/questions/33626927/can-a-row-be-deleted-by-specifying-rownum-in-oracle -11g –

ответ

2
delete t from t inner join t t2 on t2.number = t.number and t2.id < t.id 
+0

Этот запрос предполагает, что столбец 'id' никогда не будет иметь дубликатов для заданного значения' number'. –

1

Во-первых, что такое настоящее имя таблицы? На самом деле это не называется t, не так ли? Предположим, что он назван MyTable. Во-вторых, первый столбец - первичный ключ? Если это так, то

Delete from MyTable t 
where PK != 
    (Select Min(PK) from MyTable 
    where number = t.number) 

Примечания: (это должно быть очевидно) Исправьте для любых синтаксических требований MySQL спроса на удаления с подзапросами.

+0

Код ошибки xxxx: Комментарий не содержит полезной информации –

+0

Это возможность улучшить ваш комментарий и сделать его полезным. Вы хотели бы урок общения? –

+0

После добавления отсутствующего 'from' мы получаем новый код ошибки -' Код ошибки: 1093. Вы не можете указать целевую таблицу 't' для обновления в разделе FROM. Надеюсь, это достаточно ясно. –

0

Это удалит все строки, кроме 1-й строки

delete from table_name t1 
where pk_col not in (select pk_col from table_name where number = t1.number limit 1) 

Успенская pk_col = первичный ключ цв

+0

Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL –

+0

может удалить все сообщение об ошибке –

0

delete from t where number=.. and pk > (select min(pk) from t)

+0

Код ошибки: 1093. Вы не можете указать целевую таблицу 't' для обновления в предложении FROM –

0

Предположим, что у нас есть 2 колонки в таблице ТВ1:

ID Name 
1 Akshay 
2 Akshay 
3 Akshay 

В этом я хочу d далить каждую строку, кроме одного с идентификатором 2,

Так что я буду писать заявление SQL как:

delete from tb1 where ID NOT LIKE 2 

это приведет к удалению Evey строки, за исключением второго ряда.

Надеюсь, это поможет.

1

Вы можете сделать что-то вроде

DELETE FROM your_table 
WHERE (number2 = 2) 
    AND (number1 <> 1); 
Смежные вопросы