MySQL查询,以获取“”中包含重复值的所有行;鼻涕虫”;柱


MySQL query to grab ALL rows that contain duplicate value in "slug" column

此代码在"slug"列中查找包含相同值的行,如果多次找到,则对它们进行分组。

更新代码:

$sql = " SELECT *, 
         COUNT(slug) 
         FROM cars
         GROUP BY slug
         HAVING ( COUNT(slug) > 1 )";
$q   = $this->db->query($sql);
return $q;

问题是:

blue-volkswagen-2001
blue-volkswagen-2001
red-toyota-1989
red-toyota-1989
red-toyota-1989
green-mercedes-50
green-mercedes-50

我得到了这个:

blue-volkswagen-2001
red-toyota-1989
green-mercedes-50

你知道我做错了什么吗?为什么只抓第一排而不是所有重复的?

我在CodeIgniter论坛上问过这个问题,但他们不知道如何做到这一点,所以我可以接受一些SQL大师的自定义SQL查询,而不是Active Record,因为这可能是Active Record无法实现的。

您可以将INNER JOINsubquery一起使用来实现这一点。

$query = "SELECT a.*, b.total_count FROM cars a INNER JOIN (SELECT slug, count(*) as total_count FROM cars GROUP BY slug HAVING count(slug) > 1 ) b ON a.slug = b.slug WHERE  b.total_count > 1";
$output   = $this->db->query($query );

slug列进行索引以提高性能。

这将以您想要的方式提供输出。

希望这有帮助:-)

使用子查询

SELECT * FROM `cars` WHERE slug IN ( SELECT slug FROM vehicle GROUP BY slug
HAVING ( COUNT(slug) > 1 ) )

SQLFIDDLE

SELECT MAX(slug)
    FROM cars
    GROUP BY slug
    HAVING COUNT(slug) > 1