Hoe hanteer MySQL-navraag duplikaatdata?Filter om duplikaatdatastelling te verwyder

MySQLHoe om navraag te doen en duplikaatdata te verwerk? Filtreer en vee duplikaatdatastellings uit

MySQL Hanteer duplikaatdata

Daar kan duplikaatrekords in sommige MySQL-datatabelle wees. In sommige gevalle laat ons die bestaan ​​van duplikaatdata toe, maar soms moet ons ook hierdie duplikaatdata uitvee.

In hierdie hoofstuk sal ons bekendstel hoe om te verhoed dat duplikaatdata in die datatabel verskyn en hoe om duplikaatdata in die datatabel uit te vee.


Verhoed dat duplikaatdata in die tabel verskyn

U kan die gespesifiseerde veld in die MySQL-datatabel stel op PRIMÊRE SLEUTEL (primêre sleutel) of UNIEK (slegs) Indeks om die uniekheid van data te verseker.

Kom ons probeer 'n voorbeeld: Daar is geen indekse en primêre sleutels in die volgende tabel nie, so die tabel laat veelvuldige duplikaatrekords toe.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

As jy die velde first_name en last_name in die tabel wil stel sodat die data nie herhaal kan word nie, kan jy die dubbele primêre sleutelmodus stel om die uniekheid van die data te stel. As jy 'n dubbele primêre sleutel stel, is die verstekwaarde van daardie sleutel kan nie NULL wees nie en kan op NIE NULL gestel word nie. Soos volg:

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)
);

As ons 'n unieke indeks stel, sal die SQL-stelling nie suksesvol uitgevoer word wanneer duplikaatdata ingevoeg word nie en 'n fout sal gegooi word.

Die verskil tussen INSERT IGNORE INTO en INSERT INTO is dat INSERT IGNORE die data wat reeds in die databasis bestaan, sal ignoreer. As daar geen data in die databasis is nie, sal nuwe data ingevoeg word. As daar data is, sal die data oorgeslaan word. Op hierdie manier kan die bestaande data in die databasis behou word om die doel te bereik om data in die gaping in te voeg.

Die volgende voorbeeld gebruik INSERT IGNORE INTO. Daar sal geen foute wees na uitvoering nie, en geen duplikaatdata sal in die datatabel ingevoeg word nie:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO Wanneer data ingevoeg word, nadat die uniekheid van die rekord gestel is, as duplikaatdata ingevoeg word, sal geen fout teruggestuur word nie, slegs 'n waarskuwing sal teruggestuur word. As REPLACE INTO in dieselfde rekord as primêre of uniek het, sal dit eers uitgevee word. Voeg dan nuwe rekords in.

Nog 'n manier om uniekheid op jou data te stel, is om 'n UNIEKE indeks by te voeg, soos hierdie:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Tel duplikaatdata

Hieronder sal ons die aantal duplikaatrekords van voornaam en van in die tabel tel:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

Die bogenoemde navraagstelling sal die aantal duplikaatrekords in die person_tbl-tabel terugstuur. Oor die algemeen, om navraag te doen vir duplikaatwaardes, doen die volgende:

  • Bepaal watter kolom waardes bevat wat gedupliseer kan word.
  • Gebruik COUNT(*) in die kolomkeuselys om daardie kolomme te lys.
  • Kolomme gelys in die GROUP BY-klousule.
  • Die HAVING-klousule stel die aantal herhalings as groter as 1.

Filtreer duplikaatdata

As jy unieke data moet lees, kan jy die DISTINCT-sleutelwoord in die SELECT-stelling gebruik om duplikaatdata uit te filter.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

Jy kan ook GROUP BY gebruik om unieke data in die datatabel te lees:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

Verwyder duplikaatdata

As jy duplikaatdata in 'n datatabel wil uitvee, kan jy die volgende SQL-stelling gebruik:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Natuurlik kan jy ook INDEX (indeks) en PRIMAY KEY (primêre sleutel) by die datatabel voeg op 'n eenvoudige manier om duplikaatrekords in die tabel uit te vee. Metodes soos hieronder:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

Hoop Chen Weiliang Blog ( https://www.chenweiliang.com/ ) gedeel "Hoe doen MySQL navraag en verwerk duplikaatdata?" "Filter en verwyder duplikaatdatastate" sal vir jou nuttig wees.

Welkom om die skakel van hierdie artikel te deel:https://www.chenweiliang.com/cwl-499.html

Welkom by die Telegram-kanaal van Chen Weiliang se blog om die nuutste opdaterings te kry!

🔔 Wees die eerste om die waardevolle "ChatGPT Content Marketing AI Tool Usage Guide" in die kanaal se topgids te kry! 🌟
📚 Hierdie gids bevat groot waarde, 🌟Dit is 'n seldsame geleentheid, moet dit nie misloop nie! ⏰⌛💨
Share en like as jy wil!
Jou deel en laaiks is ons voortdurende motivering!

 

发表 评论

U e-posadres sal nie gepubliseer word nie. Vereiste velde word gebruik * Etiket

blaai na bo