2009-09-03 3 views
1

Table1과 관련하여 Table1과 Table2가 있습니다. 주어진 Table1.ID에 대해 0 개 이상의 Table2 레코드가있을 수 있습니다. Table2.ID 주어진 Table1.ID 최대 인 Table2.Value 가져 오려는보기가 있습니다. 친구는 파생 테이블을 제안했으나 from 절에 하위 쿼리가 필요하며 MySQL은이를 좋아하지 않습니다. 이 작업을 수행 할 수있는 다른 방법이 있습니까? 하위 쿼리 대신 보조 뷰를 설정하려고했지만 매우 느립니다. 나는 또한 having 절을 사용하여 Table2.ID = MAX (Table2.ID)를 시험해 보았지만 그룹에 넣지 않으면 열을 인식하지 못한다.MySql보기 - 다른 열이 최대 인 한 열의 값

+0

사용중인 MySQL 버전은 무엇입니까? 5.x를 사용하는 경우 서브 쿼리를 사용하면됩니다. – Wade

+0

v5.0을 사용 중입니다. 내가 읽은 문서와 오류는 from 절의 하위 쿼리가 뷰에서 허용되지 않음을 나타냅니다. 5.0에 불과합니까? –

+0

MySQL의 공개 버그 : http://bugs.mysql.com/bug.php?id=12755 –

답변

0
SELECT t1.*, t2a.* 
FROM Table1 t1 
LEFT JOIN Table2 t2a 
ON (t1.table1_id = t2a.table1_id) 
LEFT JOIN Table2 t2b 
ON (t1.table1_id = t2b.table1_id AND t2a.table2_id < t2b.table2_id) 
WHERE t2b.table2_id IS NULL 
AND t1.table1_id = ?; 
+0

대단한 작품! 보조보기보다 훨씬 빠릅니다. 감사. 이 방법으로주의해야 할 성능 문제는 무엇입니까? 테이블 크기 또는 색인 또는 아무것도에 관해서는? –

+0

글쎄, 당신은 항상 좋은 성능을 필요로하는 모든 쿼리를 EXPLAIN을 사용하여 분석해야하며, 인덱스를 잘 사용하고 있는지, 파일롯/임시 테이블을 사용하지 않는지 확인하십시오. 그러나이 쿼리는 정규화 된 데이터베이스에서 얻을 수있는만큼 확장 가능합니다. –

+0

좋은 소리. 도움에 다시 한번 감사드립니다. –