【发布时间】:2017-09-19 18:27:46
【问题描述】:
我有一个与此处发现的问题类似的问题:How to find rows in SQL that start with the same string (similar rows)?,此解决方案适用于 MySQL 5.6,但不适用于 5.7。
我有一个包含多个列的数据库 (t),其中重要的是 id 和文件路径,我想要完成的是检索所有最后 5 个字符相同的文件路径。以下在 MySQL5.6 中工作,第二个 SELECT 在 5.7 中工作正常:
SELECT id, filepath FROM t
WHERE SUBSTRING(filepath, -5) IN
(
SELECT SUBSTRING(filepath, -5)
FROM t
GROUP BY SUBSTRING(filepath, -5)
HAVING COUNT(*) > 1
)
但是当我尝试在 5.7 上运行它时,我得到了错误
Expression #1 of HAVING clause is not in GROUP BY clause and contains
nonaggregated column 't.filepath' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by
样本数据:
id filepath
1 /Desktop/file1.txt
2 /Desktop/file2.txt
3 /Desktop/file1.txt
我想返回 id 为 1 和 3 的行。我该如何为 MySQL5.7 解决这个问题?
编辑:还有人可以指出我正确的方向,让 SQL 删除重复项吗?所以我想删除 id 3 的条目,但保留 id 1 和 2 的条目。
【问题讨论】:
-
您正在查看的数据是一个庞大的数据库还是更小?如果不是太大,您可以选择整个文件路径列并使用 unix 工具来执行此操作。
-
太大了,有几百万个数据点
-
@lad2025 不适用于 mysql 5.7