【问题标题】:Using MYSQL's MD5() operation in a SELECT DISTINCT statement ignores the DISTINCT clause在 SELECT DISTINCT 语句中使用 MYSQL 的 MD5() 操作会忽略 DISTINCT 子句
【发布时间】:2013-05-09 01:29:55
【问题描述】:

如果我这样做:

SELECT DISTINCT column_1, column_2, MD5(rand()) 
FROM table

我得到了 n 行,这是正确的不同行数。

如果我这样做:

SELECT DISTINCT column_1, column_2, "whatever"
FROM table

上面返回 n+m 基本上是表中的所有行。

这里发生了什么?

【问题讨论】:

  • 所以你现在正在做一个select blah from table group by column_1, column_2 对吗?还是您需要该信息的答案?

标签: mysql md5 distinct


【解决方案1】:

您的查询细分:

SELECT DISTINCT column_1, column_2 FROM table

将返回 column_1 AND column_2 的不同结果。例如,如果您有:

column_1 column_2
Peter 26 
John 27
Adam 26
Fred 25

结果将是所有四行。

包含 MD5(rand()) 将生成一个新列,因此将返回表中的所有结果(与您实际报告的相反 - 不同行的数量)。即 SELECT DISTINCT column_2, MD5(rand()) FROM table 也将返回 4 行:

26, 2c346f92e3ccccfeccc75b1f8fbec910
27, 6f8af159c2658cf8a33d0e29419a71a6
26, 4f7f54cd9527c509da322caeb31c73c9
25, 01a4a55f61cba7ef922180b5520698d2

另一方面 - 将相同的值传递给查询实际上会返回不同数量的结果。即SELECT DISTINCT column_2, "whatever" FROM table 将返回 3 行:

26, whatever
27, whatever
25, whatever

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多