2013-04-26 2 views
3

기관이 포함 된 사례 목록이 있습니다. 모든 대행사는 상태가 할당 된 작업을 포함합니다. 0 = 완료, 1 = 진행 중이고 2 = 기한 초과.MYSQL - 올바른 데이터를 가져 오지 못함 MAX

기한이 지난 경우 모든 사례를 보여 주려고합니다. 현재 일부 작업이 지연되었지만 쿼리에서 상태가 1로 표시됩니다.

SQL 바이올린은 여기 http://sqlfiddle.com/#!2/a4394/3

나는 올바른 데이터를 꺼내하기 위해 변경해야 모르겠어요. 어떤 아이디어?

도움을 주시면 대단히 감사하겠습니다. (가) 등 조인,하지만 쿼리가 위의 연체 및 완료되지 않은 모든 경우를 제공하기위한 기지 않고

select * from `cases_task_association` where status =2; 

이것은 :

+0

당신은'group by '을 잘못 사용하고 있기 때문에 (그리고 MySQL - 유일하게 DBMS로서 - 그런 "불법적 인"사용이 가능하기 때문에). 자세한 내용은 다음을 참조하십시오. http://rpbouman.blogspot.de/2007/05/debunking-group-by-myths.html –

+2

+1 자신의 sqlfiddle을 제공합니다. – MAV

+0

다시 한 번 자신의 sqlfiddle을 제공합니다. –

답변

1

MySQL 전용 SELECT을 작성하는 것을 무시하면 조인이 잘못되었습니다. 당신이 실제로 caa.case_ID 할 때 당신이 caa.IDcc.case_ID에 합류하고 있습니다 : meewoK의 접근 @ 그러나

SELECT cc . * , a.ID, MAX(cta.status) AS current_status 
FROM cases_complete cc, agencies a, cases_agency_association caa, 
    cases_task_association cta 
WHERE cc.case_ID = caa.case_ID 
AND caa.agency_ID = a.ID 
AND cta.agency_association_ID = caa.ID 
GROUP BY cc.case_ID 

GROUP BY을 남용하지에 대한 댓글이 모두 명확 뭔가 올라오고의 관점에서 통해 생각하는 가치를 더 유지 보수가 가능하며, 더 많은 휴대용/미래 호환이 가능할 것입니다.

+0

나는 잠시 전에 나 자신을 알아 냈다. 당신의 도움을 주셔서 대단히 감사합니다 :) – Pooshonk

0

이 기본적인 문제를 해결하지 않을까요.

+0

아니요, 상태에 관계없이 모든 사례를 표시해야합니다. 클라이언트는 모든 작업의 ​​상태를 나타내는 지표가 진행 중이거나 완료되었음을 원하지만이를 해결할 수있었습니다. 아무리 고마워요 :) – Pooshonk

1

당신의 질문은 맞습니다. 문제는 당신이 여러 테이블에서 정보를 얻고 있지만 모든 테이블에 정보가 충분하지 않다는 것입니다. 기본적으로 귀하의 cases_agency_association 테이블에는 ID가 6 개까지 있으며 레코드 테이블에서 status이 2 인 경우 모두 ID가 6보다 큰 경우 ...

관련 문제