sql >> データベース >  >> RDS >> Mysql

1つまたは2つの列に基づいて、重複するすべての行を選択しますか?

    結果を達成する1つの方法は、ネストされたクエリとhaving句を使用することです。内部クエリで1つ以上のカウントを持つものを選択し、外部クエリでidを選択します:

    単一列の選択基準については、次の例を確認してください。

    テーブルの作成:

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

    タプルを挿入します:

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

    必要な結果:

    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)
    

    [回答]

    ただし、選択基準が複数の列に基づいているかのように、JOINを使用できます。

    それを説明するために、JOINで第2オペランドテーブルとして使用される中間テーブルを作成する選択クエリを作成しています。

    クエリは、すべての拳の名前を選択し、それらの重複を他の行のいくつかと列に並べます。
    たとえば、firstが含まれる行を選択します。 およびlast 名前が繰り返される

    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)
    

    したがって、firstのペアは1つだけです。 およびlast それらの繰り返しに名前を付けます(または他の行と重複しています)。

    ここで、問題は次のとおりです。idを選択する方法 この行の?参加を使用してください!次のように:

    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)
    

    必要な数の列に基づいて選択できます。例:結合を使用する場合は単一の列で、姓を削除します。



    1. 値がnullの場合、デフォルトをnull以外の列に挿入します

    2. `date`は有効なmysql列名ですか?

    3. 指定された次元のすべての長方形のマトリックスを検索します(座席のブロックを選択します)

    4. mysqlの最初の10個の異なる行を選択します