如何检查MySQL中的重复值

时间:2014-12-25 03:07:47

标签: mysql sql select group-by having

我有一张表如下:



ID   USER1    USER2
1      Q        Y
2      W        Y 
3      R        Y
4      T        Y
5      XY       Y




如何检查USER2列何时全部重复?我使用此代码但它无法正常工作

$res = mysqli_query($conn, "SELECT COMLUMN FROM TABLE");
$result = array_unique($res);
if($result == 1 )
{
echo "Unique";
}
else
{
echo "NOT Unique";
}

6 个答案:

答案 0 :(得分:4)

只做一个:

SELECT COUNT(USER2) FROM tablename GROUP BY USER2

查看它是否返回1条记录,或者第一条记录值是否等于总记录数。

以下是一个例子:

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT (SELECT COUNT(USER2) FROM tablename GROUP BY USER2 LIMIT 1) = (SELECT COUNT(USER2) FROM tablename)";
$result = $conn->query($sql);

if ($result->fetch_row()[0] == 1)
{
  // all same
}
else
{
  //not same
}

答案 1 :(得分:1)

假设您正在尝试查找USER2列重复值,请尝试此查询

SELECT tableName.*, COUNT(*) AS duplicate_count FROM tableName 
GROUP BY USER2
HAVING duplicate_count > 1

此查询返回所有重复的USER2

答案 2 :(得分:1)

假设USER2列声明为NOT NULL,或者它不包含NULL值,或者如果你想忽略NULL值......那么完成检查的最简单查询之一就是:

SELECT COUNT(DISTINCT t.USER2) AS cnt FROM `TABLE` t

只需获取查询返回的行,并将cnt与1进行比较,如果它大于1,则会有多个不同的非空值。

在更一般的情况下,当您想要考虑NULL值时,您可能想要使用GROUP BY查询。我可能会使用这样的查询:

 SELECT COUNT(1)
   FROM ( SELECT t.USER2 AS val FROM `TABLE` t GROUP BY t.USER2 ) s

答案 3 :(得分:0)

选择计数(USER2)为USER2的表组中的临时值,其中temp =' 1'

如果返回任何结果则为uniq。

答案 4 :(得分:0)

您可以使用exists检查是否存在具有不同user2值的另一行。如果不是,则所有值都相同。对于使用exists检查是否存在至少一对不同值的较大表,可能比获取不同值的总数#更快。

select case when exists (
    select 1 from mytable t1
    where exists (
        select 1 from mytable t2
        where t2.user2 <> t1.user2
    )
) then 'not unique' else 'unique'
end

答案 5 :(得分:0)

您也可以使用 DISTINCT 关键字:

SELECT COUNT(USER2) - COUNT(DISTINCT USER2) FROM tableName

如果结果等于 0 则没有重复项。