mysql - 改进 SQL 查询以删除出现次数超过 N 次的行

标签 mysql join concatenation

有没有更好的做法?

SELECT *
FROM table
WHERE CONCAT(a, b, c, d)  NOT IN 
(
  SELECT CONCAT(a, b, c, d) AS result
  FROM table
  GROUP BY result
  HAVING COUNT(*) < 40
)

我也尝试过使用一些连接,但内存不足。我想做的是,如果 a、b、c、d 重复 40 次或更多次,则忽略该数据,否则返回。最后,我将结果输出为 CSV。

编辑:示例数据

A  |B  |C  |D
---|---|---|---
123|ABC|ccc|ddd
123|ABC|ccc|ddd
... (40 times)
456|qwe|qqq|www
789|qwe|qqq|www

会返回:

456|qwe|qqq|www
789|qwe|qqq|www

最佳答案

在您的示例中,您有 NOT IN(重复 39 次或更少的结果),但您希望 HAVING COUNT(*) >= 40

你可以试试:

SELECT tba.*
FROM table tba
  INNER JOIN (SELECT a, b, c, d
               FROM table
              GROUP BY a, b, c, d
              HAVING COUNT(*) < 40
   ) as tbb ON tbb.a = tba.a AND tbb.b = tba.b AND tbb.c = tba.c AND tbb.d = tba.d

这样您就不需要更改 HAVING。

关于mysql - 改进 SQL 查询以删除出现次数超过 N 次的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33742429/

相关文章:

MySQL 错误代码 : 1238. 变量 'ft_min_word_len' 是只读变量

linux - unix join命令返回一个文件中的所有列

mysql - 在右表上有条件地左连接

c - 使用 C 连接两个字符串的数据结构程序中的错误

string - Haskell 中连接字符串和 IO 整数

c++ - 字符串连接 C++ 给出意想不到的答案

mysql - 列数不断变化的动态创建语句的存储过程

php - 这是 PHP 还是 MySQL 错误?

php - 上传图片到主机

php - 将多行表连接到一行