我的SQL查询无法返回列中发生两次以上的所有条目。 我已经查看了其他StackOverflow的答案,试图这样做,每当我将相同的查询应用于我的时候,只返回条目中第一个字符相同的条目。
例如,数据库中大约有6个条目以' - '开头。它会返回所有这些,即使它们不是完全相同的匹配。
有人能告诉我我的查询出错了吗? 我原本以为寻找重复是标准程序。
以下是我正在使用的查询:
SELECT name FROM subs GROUP BY name HAVING (COUNT(name) > 1);
以下是输出示例:
-Johnny-
-Lady_Gaga-
-Randy_Marsh-
AJWesty
All_CAPS
注意:我希望找到数据库中多次出现的所有用户名。
提前致谢!
答案 0 :(得分:1)
您可以尝试从名称列中删除破折号。这是一种方法:
SELECT REPLACE(name, '-', '')
FROM subs
GROUP BY REPLACE(name, '-', '')
HAVING (COUNT(name) > 1);
但是这种方法存在删除名称中出现破折号的风险。为避免这种情况,我们需要做更多的工作:
SELECT
CASE WHEN SUBSTR(name, 1, 1) = '-' AND SUBSTR(name, LENGTH(name), 1) = '-'
THEN SUBSTR(name, 2, LENGTH(name)-2)
ELSE name END AS name
FROM subs
GROUP BY
CASE WHEN SUBSTR(name, 1, 1) = '-' AND SUBSTR(name, LENGTH(name), 1) = '-'
THEN SUBSTR(name, 2, LENGTH(name)-2)
ELSE name END
HAVING COUNT(*) > 1;