sql >> Database teknologi >  >> RDS >> Oracle

SQL:Skal fjerne dublerede rækker i forespørgslen

Da du ikke kender alle dine forretningsregler udover den, du gav, er her en mere generel løsning.

Opret en anden tabel (eller måske har din datamodel allerede en) med de mulige statusser i dem:

CREATE TABLE status_rank (
   status   VARCHAR2(100) NOT NULL,
   rank     NUMBER NOT NULL,
   PRIMARY KEY (status_name)
);

Denne tabel bruges til at rangordne statuserne i prioriteret rækkefølge. Med andre ord, hvis "Waiver Requested" skal vælges frem for "Rejected" i tilfælde af dubletter, skal du bruge en forrang på 1 for frafald og 2 for afvisninger.

Så nu kan forespørgslen gøre brug af denne ekstra rangeringstabel:

SELECT b.docid, r.status
  FROM b,
       status_rank r,
       (SELECT b.id, min(r.rank)
          FROM b, status_rank r
         WHERE b.status = r.status
         GROUP BY id) s
 WHERE b.docid = s.docid
   AND r.rank = s.rank
   AND b.status = r.status;

Der er adskillige måder at udføre forespørgslen på, men dette burde vise dig den generelle idé.



  1. PostgreSQL-arv med JPA, Hibernate

  2. SQLite CROSS JOIN med et praktisk eksempel

  3. Give oprette en hvilken som helst udløser vs. give oprette udløser

  4. Laravel | Unik validering hvor klausul