Filter unieke records (MySQL)
Versie door Jeroen Strompf (overleg | bijdragen) op 9 aug 2018 om 17:51
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
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
. Klaar!