仅针对特定列进行选择去重

4

A query in a system I maintain returns

QID AID DATA
1   2   x
1   2   y
5   6   t

根据新的需求,我不希望(QID, AID)=(1,2)这对出现重复。同时,我们并不关心从"data"列中选择哪个值,选x或y都可以。
我所做的是将原始查询封装在这样的语句中:
SELECT * FROM (<original query text>) Results group by QID,AID

有没有更好的方法来处理这个问题?原始查询使用了多个连接和联合等,所以除非绝对必要,否则我不想去修改它。

1个回答

2

如果您不关心选择哪个DATA,那么使用GROUP BY是不错的选择,尽管在GROUP BY语句的SELECT子句中使用未分组和未聚合的列是MySQL特有的,不具备可移植性。


嗯,GROUP BY在MySQL中是特定的吗?我99.9%确定它是SQL标准的一部分。如果不是,它几乎出现在每个实现中。 - xenoterracide
1
@xenoterracide:SQL标准不允许在 SELECT 子句中使用未分组的列。除了 MySQL 外,任何引擎都会执行此查询失败(带有 *)。 - Quassnoi
在这种情况下,标准的SQL解决方案是什么? - Midhat
@Midhat:没有一个通用的,因为所有引擎都使用不同的语法来表示 LIMIT / TOP / ROW_NUMBER - Quassnoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接