查找一列的重复项,但仅在另一列具有相同值时才返回结果

时间:2019-04-23 02:28:21

标签: mysql sql

我想找到一个重复(重复)的给定列的值,但是仅当行中的另一列相同时才返回重复。

也许一个例子会更清楚。给定一个名为filter的表,我有3列(id,name,filter_type):

DESCRIBE filters;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(11)      | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255) | YES  |     | NULL    |                |
| filter_type       | varchar(255) | YES  |     | NULL    |                |
| created_at        | datetime     | YES  |     | NULL    |                |
| updated_at        | datetime     | YES  |     | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+

现在,我想选择所有重复的filter_types。很简单:

SELECT COUNT(*) as count, filter_type 
FROM filters 
GROUP BY filter_type_type HAVING count > 1; 

+-------+-----------------+
| count | filter_type     |
+-------+-----------------+
|     5 | Contact         |
+-------+-----------------+

但是,如果名称列的值对于所有组都是相同的,我只想返回重复项。因此,在上面的结果中,我们重复了“联系”。重复5次。但我只想在所有5条记录具有相同的名称列值的情况下返回此结果。

SELECT name FROM filters WHERE filter_type = 'Contact';
+---------------------------+
| name                      |
+---------------------------+
| All                       |
| All                       |
| New                       |
| All                       |
| New                       |
+---------------------------+

由于5条记录的名称值不同,因此我不想返回“联系人” filter_type。但是,如果它们都相同,那么我想将其退回。

我当时在考虑使用子查询,但不确定如何连接它们。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以为此使用聚合以及File:SV Splash late.jpg File:SV_Splash_late.jpg File:Untitled-2.png File:VikingPromo.jpg index.php?title=Special:UnusedFiles&limit=100&offset=0 index.php?title=Special:UnusedFiles&limit=20&offset=0 index.php?title=Special:UnusedFiles&limit=250&offset=0 index.php?title=Special:UnusedFiles&limit=500&offset=0 index.php?title=Special:UnusedFiles&limit=50&offset=0 子句:

having