結果を達成する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)
必要な数の列に基づいて選択できます。例:結合を使用する場合は単一の列で、姓を削除します。