2012-07-12 2 views
0

3 개의 테이블 : 링크, 키워드 및 키워드 _ 링크가 있습니다. 링크는 여러 키워드를 가질 수 있으며 여러 링크는 동일한 키워드를 가질 수 있습니다. keywords_linkslinkskeywords에 참여하는 데 사용됩니다. 다음 쿼리를 실행하면 여러 키워드가 일치하므로 동일한 링크의 여러 행이 반환됩니다. 고유 한 행을 반환하도록이 쿼리를 수정하려면 어떻게해야합니까?MySQL에서 INNER JOIN을 사용할 때 어떻게 고유 한 행을 반환 할 수 있습니까?

SELECT links . * 
FROM `links` 
INNER JOIN keywords_links ON keywords_links.link_id = id 
INNER JOIN keywords ON keywords.id = keywords_links.keyword_id 
WHERE keywords.keyword 
IN (
'php', 'sql', 'html', 'css' 
) 

답변

1

가장 쉬운 방법은 넣어하는 것 DISTINCTSELECT 애프터 :

SELECT DISTINCT links.* 
... 
... 

그러나 는 구분을하지 않도록 아마도 더 효율적인 솔루션은 쿼리를 다시 작성하는 것입니다 모든 열에 걸쳐 :

SELECT a.* 
FROM links a 
INNER JOIN 
(
    SELECT a.link_id 
    FROM keywords_links a 
    INNER JOIN keywords b ON 
     a.keyword_id = b.id AND 
     b.keyword IN ('php', 'sql', 'html', 'css') 
    GROUP BY a.link_id 
) b ON a.id = b.link_id 
+0

내부 조인으로이 기능을 시도한 적이 없지만 작동하지 않는 이유는 없습니다. [여기] (http://www.w3schools.com/sql/sql_distinct.asp)는'DISTINCT' 기능이 어떻게 작동하는지에 대한 추가 문서입니다. – acattle

관련 문제