2010-12-14 4 views
0
select min(q.rid) 
    from qvalues q 
     inner join batchinfo b 
      on q.rowid = b.rowid 
       and b.instrument = 'tf1' 
    group by q.rowid, q.name, q.compound 
    having count(*) > 1 
  1. вместо выбора мин (РИД) как я удалить все, за исключением мин (РИД)?
  2. как я могу удалить все, кроме max (rid)?

Обратите внимание, что я хочу, чтобы удалить только те значения, которые имеют тот же ROWID, имя и соединениеудалять строки, которые не имеют мин (РИД)

+0

[ Связанный вопрос] (http://stackoverflow.com/questions/4443451/expression-of-non-boolean-type/4443497#4443497) –

ответ

0
begin transaction 

delete from [table] 
where rid != 
(select min(q.rid) 
from qvalues q 
    inner join batchinfo b 
     on q.rowid = b.rowid 
      and b.instrument = 'tf1' 
group by q.rowid, q.name, q.compound 
having count(*) > 1) 
and rowid != 
(select q.rowid 
from qvalues q 
    inner join batchinfo b 
     on q.rowid = b.rowid 
      and b.instrument = 'tf1' 
group by q.rowid, q.name, q.compound 
having count(*) > 1) 
and name != 
(select q.name 
from qvalues q 
    inner join batchinfo b 
     on q.rowid = b.rowid 
      and b.instrument = 'tf1' 
group by q.rowid, q.name, q.compound 
having count(*) > 1) 
and compound != 
(select q.compound 
from qvalues q 
    inner join batchinfo b 
     on q.rowid = b.rowid 
      and b.instrument = 'tf1' 
group by q.rowid, q.name, q.compound 
having count(*) > 1) 

, чтобы удалить все, но не более, вы делаете то же самое с максимальным синтаксисом

+0

@ramy поблагодарить u, но учтите, что я хочу удалить только значения, которые имеют одинаковый rowid , имя и соединение, как в этом наборе –

+0

обновлено ........ – Ramy

+0

также, я добавил начальную транзакцию a t начало в случае, если вы фактически используете это на некоторой производственной БД. Если это вам по вкусу, используйте «commit» в конце. в противном случае используйте «rollback» – Ramy

Смежные вопросы