sql >> Database >  >> RDS >> Mysql

Alle dubbele rijen selecteren op basis van een of twee kolommen?

Een manier om uw resultaat te bereiken is het gebruik van geneste zoekopdracht en het hebben van clausule:Selecteer in de binnenste zoekopdracht die met meer dan één, en in de buitenste zoekopdracht selecteert u id:

Controleer het volgende voorbeeld voor selectiecriteria voor één kolom:

Tabel maken:

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

Tupel invoegen:

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

Het resultaat dat je nodig hebt:

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)

[ANTWOORD]

Maar alsof je selectiecriteria gebaseerd zijn op meerdere kolommen dan kun je gebruik maken van JOIN.

Om het uit te leggen ben ik een selectiequery aan het schrijven die een tussentabel maakt die in JOIN als tweede operandtabel zal worden gebruikt.

Query is selecteer alle eerste naam en kolom die duplicaten met enkele van andere rijen:
Selecteer bijvoorbeeld rijen waarin first en last naam herhaalt

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)

Je hebt dus maar één paar first en last benoemt die herhalingen (of is duplicaten met enkele andere rijen).

Nu is de vraag:hoe selecteer je id van deze rij? Gebruik Deelnemen! als volgt:

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)

u kunt op basis van zoveel kolommen selecteren als u wilt b.v. enkele kolom als u join wilt gebruiken, verwijder dan de achternaam.



  1. Hoe kan ik een datetime in SQL Server afkappen?

  2. trek 1 af van het getal in een rij SQL Query

  3. Hoe CHAR_LENGTH() werkt in MariaDB

  4. Entity Framework + MySQL - Waarom zijn de prestaties zo slecht?