查找重复的连接值

Find duplicate concat values

我正在尝试在 MySQL 数据库中查找包含重复项的每一行。

1   alex    smith
2   bob     smith
3   alex    smith

我想return:

1   alex    smith
3   alex    smith

此代码将查找重复项,但不会列出重复的每一行。

SELECT
    *,
    CONCAT(`firstName`, ' ', `lastName`) as full_name,
    COUNT(*) d
FROM users
GROUP BY full_name
HAVING d > 1;  

下面的代码是我试图获取重复的每一行的代码,但我收到错误“#1054 - 'IN/ALL/ANY subquery' 中的未知列 'full_name'”

SELECT CONCAT(`firstName`, ' ', `lastName`) as full_name
FROM users
WHERE full_name IN (
    SELECT CONCAT(`firstName`, ' ', `lastName`) as full_name
    FROM users
    GROUP BY full_name
    HAVING COUNT(full_name) > 1
)

您不能在 WHERE 子句中使用别名;而且您实际上并不需要 CONCAT (在这种情况下它会增加您的计算成本);相反,您可以比较 "tuples".

SELECT *
FROM users
WHERE (`firstName`, `lastName`) IN (
    SELECT `firstName`, `lastName`
    FROM users
    GROUP BY `firstName`, `lastName`
    HAVING COUNT(*) > 1
);