2012-07-05 2 views
0

그래서 내가 사용하고 다음 쿼리는 4 개 행이 생성 간결성을 위해엽기 MySQL의 행동이

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 | 
+--------+------------------+ 

내가 자연스럽게, 마지막 행에서만 흥미 해요, 내가 dmvID에 MAX()를 사용하는 SELECT 문을 수정합니다 :

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

:

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

참고 그 681411 위에서는 사실 맥스()에 있지만은,642,354 연관가 나는 내가 어떻게합니까 그것을 반환 할 dmvID 566053.에 일치하는 것 생각 것, dmvID 681411에 해당하는 값이 아닙니다 :

만 해당 열에서 가장 높은 값을 가진 단일 행을해야 할 경우
+--------+------------------+ 
| dmvID | documentTypeName | 
+--------+------------------+ 
| 681411 | ASCO Documents | 
+--------+------------------+ 
+0

그리고 전체 검색어에서 정확히 한 행만 필요합니다 (다른 세 개를 사용하지 않겠습니까?). –

+0

그건 맞아, 나는 단지 하나만 필요해. – Scott

답변

3

, MAX()를 사용하는 집계 쿼리 대신 ORDER BY 및 LIMIT 1을 사용합니다.

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

이상하게도'dmvID' 681411과'documentTypeName'에 대한 "ASCO Documents"가 아닌 "Default"에 대해 여전히 예상치 못한 결과가 반환됩니다. – Scott

+0

MAX()를 사용하지 않고 * 편집 *을 했습니까? –

+0

아, 내가 총을 뛰어 올라서 SQL로 바로 갔다고 생각해. 그게 효과가 있었어! 감사! – Scott

관련 문제