2011-05-10 29 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