Bord eller resultatsett noen ganger inneholde like poster. Noen ganger er det lov, men noen ganger er det nødvendig å stoppe like poster. Noen ganger er det nødvendig å identifisere like poster og fjerne dem fra bordet. Dette kapittelet vil beskrive hvordan du kan forhindre like poster som forekommer i en tabell og hvordan å fjerne allerede eksisterende like poster
Hindre duplikater oppstår i en tabell.
Du kan bruke en PRIMÆR KEY
eller UNIK
Index på et bord med aktuelle feltene for å stoppe like poster. La oss ta ett eksempel: Tabellen inneholder ingen slik indeks eller primærnøkkel, så det ville tillate like poster for FIRST_NAME og last_name
CREATE TABLE person_tbl (FIRST_NAME CHAR (20), last_name CHAR (20), sex CHAR (10. ));
For å forhindre at flere poster med samme fornavn og etternavn verdier blir skapt i denne tabellen, legge til en primærnøkkel til sin definisjon. Når du gjør dette, er det også nødvendig å erklære de indekserte kolonner for å være NOT NULL, fordi et PRIMARY KEY ikke tillater NULL verdier:
CREATE TABLE person_tbl (FIRST_NAME CHAR (20) NOT NULL, last_name CHAR (20) NOT NULL , sex CHAR (10), PRIMARY KEY (last_name, FIRST_NAME));
Tilstedeværelsen av en unik indeks i en tabell fører normalt en feil å skje hvis du setter inn en post i tabellen som dupliserer en eksisterende post i kolonnen eller søyler som definerer indeksen.
Bruk INSERT IGNORE
stedet for INSERT
. Hvis en post ikke duplisere en eksisterende post, MySQL setter den som vanlig. Hvis posten er en kopi, forteller IGNORE nøkkelord MySQL for å forkaste det stille uten å generere en feil
Etter eksempel ikke feil ut og samtidig det vil ikke sette like poster
mysql >..; INSERT IGNORE INTO person_tbl (LAST_NAME, FIRST_NAME) - > VERDIER ('Jay', 'Thomas'); Query OK, påvirket en rad (0,00 sek) mysql > INSERT IGNORE INTO person_tbl (LAST_NAME, FIRST_NAME) - > VERDIER ('Jay', 'Thomas'); Query OK, 0 rader påvirket (0,00 sek)
Bruk BYTT
stedet for INSERT. Hvis posten er ny, er det satt inn akkurat som med INSERT. Hvis det er et duplikat, erstatter den nye posten den gamle:
mysql > BYTT TIL person_tbl (last_name, FIRST_NAME) - > VERDIER ('Ajay', 'Kumar'); Query OK, påvirket en rad (0,00 sek) mysql > BYTT TIL person_tbl (last_name, FIRST_NAME) - > VERDIER ('Ajay', 'Kumar'); Query OK, 2 rader påvirket (0,00 sek)
SETT ignorere og BYTT bør velges i henhold til den duplikat-håndtering atferd du ønsker å gjennomføre. INSERT IGNORE holder den første av et sett av dupliserte poster og forkaster resten. BYTT holder den siste av et sett av duplikater og slette eventuelle tidligere.
En annen måte å håndheve unikhet er å legge til en entydig indeks snarere enn en primærnøkkel i en tabell.
CREATE TABLE person_tbl (FIRST_NAME CHAR (20) NOT NULL, last_name CHAR (20) NOT NULL, sex CHAR (10) UNIK (last_name, FIRST_NAME));
Opptelling og identifisere duplikater:
Følgende er spørringen til å telle like poster med FIRST_NAME og last_name i en tabell
mysql >.; SELECT COUNT (*) som gjentakelser, last_name, FIRST_NAME - > Fra person_tbl - > GROUP BY last_name, FIRST_NAME - > HAR repetisjoner > 1;
Dette søket vil returnere en liste over alle like poster i person_tbl tabellen. Generelt, for å identifisere sett med verdier som er duplisert, gjør du følgende:
Bestem hvilke kolonner inneholder verdiene som kan dupliseres
List dem. kolonner i kolonne utvalg listen, sammen med COUNT (*).
liste kolonnene i GROUP BY-leddet også.
Legg en HAR klausul som eliminerer unike verdier ved å kreve gruppe teller å være større enn én
eliminere duplikater fra en spørring. Resultat:
Du kan bruke DISTINCT
sammen med SELECT-setningen for å finne ut unike poster som er tilgjengelige i en tabell
mysql >.; SELECT DISTINCT last_name, FIRST_NAME - > Fra person_tbl - > ORDER BY last_name;
Et alternativ til DISTINCT er å legge et GROUP BY-ledd som navngir kolonnene du velger. Dette har effekten av å fjerne duplikater og velge bare den unike kombinasjonen av verdier i kolonnene:
mysql > VELG last_name, FIRST_NAME - > Fra person_tbl - > GROUP BY (last_name, FIRST_NAME);
Fjerne duplikater Bruke Tabell Erstatning:
Hvis du har like poster i en tabell, og du ønsker å fjerne alle like poster fra denne tabellen, så her er fremgangsmåten:
mysql > CREATE TABLE tmp SELECT last_name, FIRST_NAME, sex - > Fra person_tbl; - > GROUP BY (last_name, FIRST_NAME); mysql > DROP TABLE person_tbl; mysql > ALTER TABLE tmp Endre navn for å person_tbl;
En enkel måte å fjerne like poster fra en tabell er å legge en indeks eller PRIMAY KEY til det bordet. Selv om denne tabellen er allerede tilgjengelig, kan du bruke denne teknikken for å fjerne like poster, og du vil være trygg i fremtiden også
mysql >.; ALTER IGNORE TABELL person_tbl - > ADD PRIMARY KEY (last_name, FIRST_NAME);