2010-01-20 4 views
1

나는 'discussion'과 'discussion_responses'라는 두 개의 테이블을 가지고있다. 'discussion'의 고유 ID는 'discussion_responses'에서 포럼의 원래 게시물에 대한 응답을 식별하는 데 사용됩니다. 새 답글이 있지만 새 항목에 연결되어 있지 않은 게시물을 추출하는 다음 쿼리를 만들었습니다.특정 필드의 데이터가 비슷한 레코드 집합 줄이기. (MySQL)

SELECT * 
FROM discussion, discussion_responses 
WHERE discussion.discussion_date < colname 
AND discussion_responses.discussion_date > colname 
AND discussion.discussion_ID = discussion_responses.discussion_ID 
ORDER BY discussion.discussion_title ASC 

내 문제가 하나 개 이상의 응답이 제작 된 곳이다 : 두 테이블은 날짜 필드가 추가되고 'COLNAME가'다른 테이블에서 검색 방문자의 마지막 로그인 날짜에 대한 드림위버의 변수 이름이 원래 게시물 인 경우 해당 토론 ID에 대해 자연스럽게 하나 이상의 결과를 얻습니다. 아무도 내가 같은 discussion_ID 포함하는 후속 행을 제거 할 수있는 방법에 관해서는 조언을 주실 수 있습니까? 어떤 레코드가 선택되었는지는 중요하지 않습니다. 단지 관련된 새 답글을 가지고있는 주제의 ID를 얻습니다. 감사.

답변

0

discussion_ID에 관심이 있다면 distinct 또는 group by를 사용할 수 있습니다. 다음은 별개의와 예는 다음과 같습니다

SELECT  DISTINCT discussion_ID 
FROM  discussion d 
INNER JOIN discussion_responses dr 
ON   d.discussion_ID = dr.discussion_ID 
WHERE  d.discussion_date < colname 
AND   dr.discussion_date > colname 

당신은 또한 하위 쿼리의 고유 한 ID 년대에 필터, 다른 컬럼에 관심이 있다면 :

SELECT  * 
FROM  discussion d 
WHERE  d.discussion_ID IN (
    <query from above here> 
) 
+0

감사합니다. 그것은 치료를했습니다. – Richard

1

이 :

SELECT * 
FROM discussion d 
WHERE discussion_date < colname 
     AND EXISTS 
     (
     SELECT NULL 
     FROM discussion_responses dr 
     WHERE dr.discussion_date > colname 
       AND dr.discussion_ID = d.discussion_ID 
     ) 
ORDER BY 
     d.discussion_title ASC 

또는이 :

SELECT d.* 
FROM (
     SELECT DISTINCT discussion_ID 
     FROM discussion_responses dr 
     WHERE dr.discussion_date > colname 
     ) 
JOIN discussion d 
ON  d.discussion_ID = dr.discussion_ID 
WHERE d.discussion_date < colname 
ORDER BY 
     d.discussion_title ASC 

라떼 두 번째 쿼리의 선행 테이블 (discussion_responses)에 사용 된 조건이 더 선택 적이므로 r 쿼리가 더 빠를 것입니다.

discussion_responses (discussion_date, discussion_id)에 대한 색인을 생성하십시오.