2012-07-05 59 views
0

所以下面的查詢,我使用產生4行:MySQL的怪異行爲,試圖使用MAX()彙總結果時

SELECT 
    `DMV`.`id` AS `dmvID`, 
    `D`.`id` AS `documentID`, 
    `DMV`.`name` AS `documentName`, 
    `U`.`username` AS `creatorUserName`, 
    `D`.`folder_id` AS `folderID`, 
    `D`.`created` AS `createDate`, 
    `SL`.`name` AS `statusName`, 
    `UM`.`username` AS `modifiedUserName`, 
    `DMV`.`version_created` AS `modifiedDate`, 
    `UO`.`username` AS `ownerUserName`, 
    `DTL`.`name` AS `documentTypeName` 
FROM 
    `document_metadata_version` `DMV` 
    LEFT JOIN `documents` `D` 
    ON `DMV`.`document_id` = `D`.`id` 
    LEFT JOIN `users` `U` 
    ON `D`.`creator_id` = `U`.`id` 
    LEFT JOIN `users` `UM` 
    ON `D`.`modified_user_id` = `UM`.`id` 
    LEFT JOIN `users` `UO` 
    ON `D`.`owner_id` = `UO`.`id` 
    LEFT JOIN `status_lookup` `SL` 
    ON `D`.`status_id` = `SL`.`id` 
    LEFT JOIN `document_types_lookup` `DTL` 
    ON `DMV`.`document_type_id` = `DTL`.`id` 
WHERE 
    DMV.document_id = 543433 
; 

爲了簡潔起見,我會忽略所有的不相關的領域不與手頭的問題有關。的dmvIDdocumentTypeName(第一和最後一列)的結果是:

+--------+------------------+ 
| dmvID | documentTypeName | 
+--------+------------------+ 
| 566053 | Default   | 
| 566183 | Default   | 
| 681391 | ASCO Documents | 
| 681411 | ASCO Documents | 
+--------+------------------+ 

我只是在最後一排有趣的,所以很自然,我將修改SELECT語句上dmvID使用MAX():

SELECT 
    MAX(`DMV`.`id`) AS `dmvID`, 
# Rest of query unchanged 

返回:

+--------+------------------+ 
| dmvID | documentTypeName | 
+--------+------------------+ 
| 681411 | Default   | 
+--------+------------------+ 

注意從681411以上實際上是在MAX(),但相關documentTypeName是不是dmvID 681411等值,我會假設它是它匹配dmvID 566053.我如何得到它返回:

+--------+------------------+ 
| dmvID | documentTypeName | 
+--------+------------------+ 
| 681411 | ASCO Documents | 
+--------+------------------+ 
+0

,你只需要只有一行從這個整個查詢(即不會使用其他三)? – 2012-07-05 16:32:29

+0

這是正確的,我只需要一個。 – Scott 2012-07-05 16:33:15

回答

3

如果你只需要單排最高值,該列中,使用ORDER BY和LIMIT 1(而不是使用MAX()的聚合查詢)。

... 
WHERE 
DMV.document_id = 543433 
ORDER BY dmvID DESC 
LIMIT 1; 
+0

奇怪的是,對於'documentTypeName',對於'dmvID' 681411和「Default」,不是「ASCO Documents」,它仍然返回相同的意外結果。 – Scott 2012-07-05 16:35:31

+0

你是否抓住我的編輯,爲*不*使用MAX()? – 2012-07-05 16:36:18

+0

啊,我想我跳過槍,直奔SQL。這工作!謝謝! – Scott 2012-07-05 16:38:20