sql >> Databáze >  >> RDS >> Database

Jak odstranit duplicitní řádky v SQL

Problém:

Rádi byste ze sady výsledků dotazu odstranili všechny duplicitní řádky, aby se každý řádek objevil pouze jednou.

Příklad:

Naše databáze obsahuje tabulku s názvem clothes s údaji v následujících sloupcích:id , name , color a year_produced .

id jméno barva year_produced
1 Tričko žlutá 2015
2 bunda modrá 2016
3 džíny černá 2015
4 bunda modrá 2015
5 bunda zelená 2016
6 bunda žlutá 2017
7 klobouk žlutá 2017

Podívejme se na neopakovaná jména a barvy oděvů vyrobených před rokem 2017.

Řešení:

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

Zde je výsledek:

name barva
Tričko žlutá
bunda modrá
džíny černá
bunda zelená

Všimněte si, že modrý se v této sadě výsledků vyskytuje pouze jednou, i když se v původní tabulce vyskytuje dvakrát. Je to proto, že jsme zadali, že chceme vybrat pouze ty řádky, pro které je kombinace názvu a barvy jedinečná.

Diskuse:

Jednoduše použijte DISTINCT klíčové slovo po SELECT pokud chcete vybrat pouze neopakované řádky. Toto klíčové slovo přinutí dotaz zahodit všechny duplicitní řádky pouze na základě vámi uvedených sloupců.

Zde je příklad výběru pouze řádků, pro které je název položky jedinečný:

SELECT DISTINCT name
FROM clothes
WHERE year_produced < 2017;

Na rozdíl od předchozího dotazu tento vrací pouze tři záznamy:

name
Tričko
džíny

Zatímco v původní tabulce jsou čtyři džíny (dva modré, jeden zelený a jeden žlutý), položka se v této sadě výsledků zobrazí pouze jednou díky DISTINCT klíčové slovo.


  1. SQL Server UNION - Jaké je výchozí ORDER BY Chování

  2. Oznámení ClusterControl 1.4.1 - vydání ProxySQL

  3. #1055 - Výraz seznamu SELECT není v klauzuli GROUP BY a obsahuje neagregovaný sloupec, což není kompatibilní s sql_mode=only_full_group_by

  4. MySQL Alter Stored Procedure