Filter unieke records (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Wat bedoel je: Dubbelen uitfilteren, of unieke records uitfilteren?

Subtiel doch belangrijk verschil! Misschien bedoel ik Duplicate records (MySQL)?

Voorbeeld: Is dit wat je bedoelt?

Deze query selecteert alle records die meer dan één keer voorkomen: Dat is meestal niet wat ik zoek ;)

select sku, count(sku) from root
group by sku having count(sku)>1

Voorbeeld: Bijna goed en dus precies fout

Deze query kopiëert alleen de records die maar één keer voorkomen. Dat was achteraf gezien niet wat ik zocht: Ik wil alle records maar één keer overnemen!

drop table if exists tmp;

create table tmp
select 

	tool_id, 
	count(tool_id) as teller 

from main_tmp 
group by tool_id     	-- Om een of andere reden is 'group by' noodzakelijk
having teller = 1;	-- 'where' werkt niet. 'having' wel

Media:Voorbeeld.ogg

DISTINCT

Met het keyword distinct kun je unieke waardes filteren. Het probleem is echter, dat je alleen maar die éne kolom kunt tonen (of zoiets). Dus net niet handig, tenzij het een toekomstige primaire sleutel betreft [1]

Kopiëer naar nieuwe tabel met IGNORE + PK

Wat ik in de praktijk meestal doe:

  • Defineer een gelijkvormige tabel
  • Maak van de betreffende kolom de PK
  • Kopiëer alle records naar die nieuwe tabel, met SELECT IGNORE<code>. Klaar!

Bronnen