【问题标题】:Find duplicate concat values查找重复的连续值
【发布时间】:2017-12-14 18:08:27
【问题描述】:

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

1   alex    smith
2   bob     smith
3   alex    smith

我想回来:

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 - Unknown column 'full_name' in 'IN/ALL/ANY subquery'”

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 firstName='x' and lastName='y'
  • @Ali OP 也想查找所有其他重复项。
  • 啊,好吧,问题理解错了
  • "*" 在这个查询的上下文中没有意义

标签: mysql group-by having


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 2016-08-24
    • 2019-11-23
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多