2013-05-15 2 views
0

MySQL 데이터베이스에서 두 테이블을 쿼리해야합니다. 다음은 간단한 개요입니다 : 2 개의 테이블 : articles 및 article_logs. 나는 2700 개의 기사와 같은 생각을 가지고 있으며 각 기사는 20에서 50 개의 로그를 가질 수 있습니다. 각 기사의 마지막 로그 날짜를 표시하고 싶습니다. 문제는 쿼리를 실행하는 데 오래 걸리는 것입니다.MySQL - INNER JOIN - 두 번째 테이블의 마지막 ID 만 가져옵니다.

나는 그런 식으로 뭔가를 시도하고있다 :

SELECT articles.id, article_logs.date FROM articles 
LEFT JOIN (SELECT MAX(id), hash_key, date FROM logs GROUP BY id) c 
ON article.hash_key = c.hash_key 

는 적절하고 효율적인 방법으로이 작업을 수행하는 방법에 대한 아이디어가 있습니까.

대단히 감사합니다.

+0

팁 :'date'는 MySQL의 예비 키워드가 너무'\'' – diEcho

+1

함께 id'에 의해'최대 (ID)'와'그룹을 사용하여 그것을 포장입니다 말이되지 않습니다. 그리고 다른 DBMS는이 부정확 한'group by '사용법을 단순히 거부 할 것이다. –

+0

@diEcho, 날짜가 예제 일뿐입니다. 테이블의 이름은 log_date입니다 ... 감사합니다. –

답변

1

은 아마 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

SELECT a.id, 
     (SELECT MAX(l.date) 
     FROM logs l 
     WHERE l.hash_key = a.hash_key) date 
FROM articles a 
+0

완벽한, 그거야, tahnk sooo sooo much .. –

+0

Milos 내 쿼리는 'hash_key'에 대한 최대 날짜가 필요한 경우에만 작동합니다. 하지만 (쿼리에서와 같이) MAX'id '에 대한 날짜가 필요한 경우 쿼리를 변경해야합니다. 이제 나는 최대'date'가 항상 최대'id'를 가지고 있다고 생각합니다. 무언가가 작동하지 않으면 의견을 쓰고 대답을 편집합니다. – Justin

+0

예, 각 기사가 고유 한 hash_key로 식별되므로 특정 hash_key의 최대 날짜가 필요합니다. –