更新编辑:是通过任意使用查询中的其他字段来区分或分组以消除重复或选择最顶层的行,还是以任何方式考虑排序?
在我使用大量连接表的情况下,我有一个非常复杂的查询,我希望我可以发布全部内容,但是它的专有部分就足够了,但是下面是一个简单的示例--我正在试图弄清楚mySQL在根据下面这类查询进行分组和输出行时所做的事情(真正的查询大约是2页)。
版本1-设计以消除ID2的重复记录
SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS
DISTINCT ID1
, ID2
, ID2_Sequence
, DATE1
, DATE2
, <SECRET GUTS OMITTED>
GROUP BY ID2
ORDER BY DATE1 DESC
*sometimes ORDER BY DATE2 DESC*版本2-设计用于显示所有记录
SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS
DISTINCT ID1
, ID2
, ID2_Sequence
, DATE1
, DATE2
, <SECRET GUTS OMITTED>
GROUP BY ID1
ORDER BY DATE1 DESC
*sometimes ORDER BY DATE2 DESC*还有其他几个连接是其中的一部分,但我认为这是它的要点。我们要面对的主要问题以及我们为什么消除重复的原因是,基于ID1序列的另一个字段,ID2和ID2s之间存在一对多的ID2。
在对数据的第一次检查中(大约有70家学院很难确定正在被过滤的是什么)它看起来像是在用旧的DATE1删除记录,但我不相信是这样的吗?
谢谢
发布于 2012-03-21 14:21:26
group by将折叠分组字段相同的任何行。select distinct与select distinctrow相同,并将“distinct”应用于整个行。例如:
field1 field2 field3
1 1 1 <--- row 1
1 1 2 <--- row 2
1 2 3 <--- row 3
1 1 1 <--- row 4, identical to row 1然后执行以下查询:
SELECT * FROM x GROUP BY field1返回一行,因为所有行都具有相同的field1值。
SELECT * FROM x GROUP BY field1, field2返回2行,因为field2有两个不同的值
SELECT DISTINCT * FROM X返回3行,因为第1行和第4行是相同的,您将得到行1、2、3
https://stackoverflow.com/questions/9806392
复制相似问题