2010-12-14 6 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. statt der Auswahl des min haben (rid) Wie lösche ich alles außer min (los)?
  2. Wie lösche ich alles außer für max (los)?

Bitte beachten Sie, dass ich nur Werte löschen möchten, die denselben Rowid, Namen haben, und die VerbindungZeilen löschen, die min (rid) nicht

+0

[ In Verbindung stehende Frage] (http://stackoverflow.com/questions/4443451/expression-of-non-boole-an-type/4443497#4443497) –

Antwort

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) 

alle bis max zu löschen, tun Sie das gleiche mit der max Syntax

+0

@ramy danken Ihnen aber bitte, dass ich nur Werte löschen möchte, die das selbe rowid haben , Name und Verbindung wie in diesem Satz –

+0

aktualisiert ......... – Ramy

+0

auch, ich habe eine begin transaction a hinzugefügt t den Anfang, falls Sie dies tatsächlich in einer Produktionsdatenbank verwenden. Wenn es Ihnen gefällt, verwenden Sie am Ende "commit". Ansonsten benutze "rollback" – Ramy

Verwandte Themen