вложенные операторы delete / sql - PullRequest
2 голосов
/ 14 декабря 2010

следующий оператор возвращает это:

select rowid,name,compound,COUNT(*) from qvalues where rowid in (select rowid from batchinfo where instrument='tf1')
group by rowid,name,compound
having COUNT(*)>1



rowid   name    compound    (No column name)
19300   QC1 ETG 2
20379   QC4 ETS 2
20686   QC2 ETG 2
19402   QC1 ETG 2
23605   QC1 ETG 2
21705   QC3 ETS 2
23678   QC1 ETG 2
18480   QC2 ETG 2

..... ...... .....

У меня есть еще одна таблица с именем qvalues:

rid name    compound    rt  response    finalConc   qvalue  rowid
229263  QC3 Hydromorphone   0.69    6228.00 82.53   98  4695
229264  QC3 Morphine    0.51    3168.00 119.89  99  4695
229265  QC3 Oxymorphone 0.57    2472.00 83.89   99  4695
229266  QC3 Benzoylecgonine 2.17    20439.25    85.99   95  4695
229267  QC3 Codeine 1.34    4829.00 82.85   96  4695
229268  QC3 Hydrocodone 1.58    12416.00    84.99   94  4695
229269  QC3 Oxycodone   1.47    5430.00 78.44   94  4695
229270  QC3 Buprenorphine   2.54    366.13  10.41   98  4695
229271  QC3 Mepbrobamate    2.50    1330.34 95.56   92  4695
229272  QC3 Methadone   2.68    85897.27    86.77   92  4695

что мне нужно сделать, это взять комбинацию ROWID, NAME, COMPOUND из первого набора и сохранить только первое его появление во втором наборе. Мне нужно удалить все остальные строки, которые имеют комбинацию ROWID, NAME и COMPOUND из соединения. Мне нужно сохранить эту комбинацию, где МПОГ является наименьшим.

пожалуйста, дайте мне знать, если мне нужно что-то уточнить

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

Таким образом, вы хотите удалить все, что есть в batchinfo, кроме записи с наименьшим значением избавления ...

delete qvalues where rid in
    (select rid
    from qvalues 
    where rowid in (select rowid from batchinfo where instrument='tf1') 
    except
    select rid
    from (select rid=min(rid)
        from qvalues
        where rowid in (select rowid from batchinfo where instrument='tf1') 
        group by rowid,name,compound) x);

count> 2 не требуется, поскольку при count = 1 это всегда записьизбавиться от маленьких.

0 голосов
/ 14 декабря 2010

Я бы создал псевдоним таблицы во втором наборе, сгруппировав по именам, составным, имея MIN (rowid), а затем соединил бы это с первым множеством.

Затем удалите все, что не входит в этот набор, используя NOT IN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...