2011-05-10 66 views
2

试图获得一个SELECT语句的结果的校验和,试过这种SELECT的校验结果在MySQL

SELECT sum(crc32(column_one)) 
FROM database.table; 

其中的工作,但并没有工作:

SELECT CONCAT(sum(crc32(column_one)),sum(crc32(column_two))) 
FROM database.table; 

开放的建议,主要想法是从SELECT语句中获取行和列结果的SUM的有效校验和。

+3

你是什么意思“没有工作”?错误讯息?意外的结果?服务器崩溃了? – Oswald 2011-05-10 20:06:28

回答

11

问题是CONCATSUM在这种格式不兼容。

CONCAT被设计为在您的结果集中每行运行一次该行所定义的参数。

SUM是一个聚合函数,用于在完整的结果集上运行。

CRC32CONCAT具有相同的功能等级。

所以,你已经有了一种功能嵌套在一起的方式。

你可以尝试:

SELECT CONCAT(
    (SELECT sum(crc32(column_one)) FROM database.table), 
    (SELECT sum(crc32(column_two)) FROM database.table) 
); 

SELECT sum(crc32(column_one)), sum(crc32(column_two)) 
FROM database.table; 

,并与你的客户的语言将它们连接起来。

+0

很好的解释,谢谢! – blunders 2011-05-10 22:41:07

+0

请务必记住您的大型“预期碰撞”表格 https://stackoverflow.com/a/14210379/1896134这可能会给您带来“误报” – JayRizzo 2017-06-08 21:21:34