sql >> Databasteknik >  >> RDS >> Mysql

Välj alla duplicerade rader baserat på en eller två kolumner?

Ett sätt att uppnå ditt resultat är att använda kapslad fråga och ha-sats:I den inre frågan välj de som räknar mer än en, och i den yttre frågan välj id:

Kontrollera följande exempel för urvalskriterier för en kolumn:

Skapa tabell:

CREATE TABLE `person` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `first` varchar(120) NOT NULL,
    `last` varchar(120) NOT NULL
);

Infoga tupel:

INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );

Resultatet du behöver:

mysql> SELECT  `id` 
    -> FROM `person` 
    -> WHERE `first`=(SELECT `first` FROM `person` HAVING COUNT(`first`) > 1);
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

[SVAR]

Men som om dina urvalskriterier baseras på mer än en kolumn så kan du använda JOIN.

För att förklara det skriver jag en urvalsfråga som skapar en mellantabell som kommer att användas i JOIN som andra operandtabell.

Frågan är markera alla första namn och kolumn dessa dubbletter med några av andra rader:
Välj till exempel rader där first och last namnet upprepas

mysql> SELECT `first`, `last`,  count(*)  as rows 
    -> FROM `person` 
    -> GROUP BY `first`, `last` 
    -> HAVING count(rows) > 1;
+-------+-----------+------+
| first | last      | rows |
+-------+-----------+------+
| mukta | chourishi |    2 |
+-------+-----------+------+
1 row in set (0.00 sec)

Så du har bara ett par first och last namnger dessa upprepningar (eller är dubbletter med några andra rader).

Nu är frågan:hur man väljer id av den här raden? Använd Gå med! enligt följande:

mysql> SELECT  p1.`id`
    -> FROM `person` as p1
    -> INNER JOIN (
    ->     SELECT `first`, `last`,  count(*)  as rows
    ->     FROM `person` 
    ->     GROUP BY `first`, `last` 
    ->     HAVING count(rows) > 1) as p
    -> WHERE p.`first` = p1.`first` and p.`last` = p1.`last`;  
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.06 sec)

du kan välja utifrån hur många kolumner du vill t.ex. enda kolumn om du vill använda join, ta bort efternamn.



  1. PLS-00428:en INTO-sats förväntas i denna SELECT-sats

  2. Hur använder man en underfråga för dbtable-alternativet i jdbc-datakällan?

  3. Count(*) vs Count(1) - SQL Server

  4. Benchmarking Managed PostgreSQL Cloud Solutions - Del fyra:Microsoft Azure