SELECT 具有基于 MySQL、H2 和 DB2 的列子集的唯一值

SELECT with unique values based on a subset of columns for MySQL, H2 and DB2

我有以下查询,在 MySQL 中运行良好:

SELECT *
FROM mytable
GROUP BY col2, col3, col4, col5, col6

这允许我 select 来自 mytable 的所有结果,这些结果是基于多列 col2, col3, col4, col5, col6.

的值的唯一(不同的)

不幸的是,该查询不适用于 H2DB2(它给出了 ...必须在GROUP BY 列表... 错误),我正在寻找通用且 高效 替代方案。

我也试过下面这个:

SELECT t1.col1, t1.col2, t1.col3, t1.col4, t1.col5, t1.col6
FROM mytable t1
JOIN (SELECT t2.col2, t2.col3, t2.col4, t2.col5, t2.col6
        FROM mytable t2
        GROUP BY t2.col2, t2.col3, t2.col4, t2.col5, t2.col6) x 
        ON x.col1 = t1.col1
            AND x.col2 = t1.col2
            AND x.col3 = t1.col3
            AND x.col4 = t1.col4
            AND x.col5 = t1.col5
            AND x.col6 = t1.col6;

但它非常慢(尝试使用 Docker MariaDB 本地实例),特别是因为我将在 INSERT INTO ... 查询中使用 SELECT,所以我需要一些高效的东西。

有什么帮助吗?

谢谢

在 MySQL:

中工作正常
SELECT *
FROM mytable
GROUP BY col2, col3, col4, col5, col6

MySQL 的旧版本碰巧支持这种语法,但它是错误的语法。 SELECTGROUP BY 子句不一致。令人高兴的是 MySQL 在过去几年发布的版本中不支持这种语法(使用默认配置)。

如果您希望每个组合占一行,请使用 window 函数或一些类似的方法:

select t.*
from (select t.*,
             row_number() over (partition by col2, col3, col4, col5, col6 order by col2) as seqnum
      from mytable t
     ) t
where seqnum = 1;