sql >> Databasteknik >  >> RDS >> Database

Hur man eliminerar dubbletter av rader i SQL

Problem:

Du vill ta bort alla dubbletter av rader från resultatuppsättningen för en fråga så att varje rad endast visas en gång.

Exempel:

Vår databas har en tabell som heter clothes med data i följande kolumner:id , name , color , och year_produced .

id namn färg år_producerat
1 T-shirt gul 2015
2 jacka blå 2016
3 jeans svart 2015
4 jacka blå 2015
5 jacka grön 2016
6 jacka gul 2017
7 hatt gul 2017

Låt oss få de icke-upprepade namnen och färgerna på kläder som producerats före 2017.

Lösning:

SELECT DISTINCT name,
  color
FROM clothes
WHERE year_produced < 2017;

Här är resultatet:

namn färg
T-shirt gul
jacka blå
jeans svart
jacka grön

Lägg märke till att den blå endast visas en gång i denna resultatuppsättning, även om den förekommer två gånger i den ursprungliga tabellen. Detta beror på att vi angav att vi bara vill välja de rader för vilka kombinationen namn och färg är unik.

Diskussion:

Använd bara DISTINCT nyckelord efter SELECT om du bara vill välja rader som inte upprepas. Detta sökord tvingar frågan att kassera alla dubbletter av rader, endast baserat på kolumnerna du listade.

Här är ett exempel på att bara välja rader för vilka objektets namn är unikt:

SELECT DISTINCT name
FROM clothes
WHERE year_produced < 2017;

Till skillnad från den tidigare frågan returnerar denna endast tre poster:

namn
T-shirt
jeans

Även om det finns fyra jeans i den ursprungliga tabellen (två blå, en grön och en gul), visas föremålet bara en gång i denna resultatuppsättning tack vare DISTINCT nyckelord.


  1. Dataåtkomst från Raspberry Pi

  2. Spring Batch ORA-08177:kan inte serialisera åtkomst för denna transaktion vid körning av enstaka jobb, SERIALISERAD isoleringsnivå

  3. Hur man löser ORA-28000 kontot är låst

  4. Hur man skapar ett unikt index där kolumnordningen inte beaktas (set?)