2012-07-12 42 views
0

我有3个表格:链接,关键字和keywords_links。链接可以有多个关键字,多个链接可以具有相同的关键字。 keywords_links用于加入linkskeywords。 当我运行以下查询时,由于多个关键字匹配而返回同一链接的多行。我如何修改这个查询来返回唯一的行?如何在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

我从来没有尝试过这种内部连接,但我没有看到为什么它不起作用的原因。 [Here](http://www.w3schools.com/sql/sql_distinct.asp)是关于'DISTINCT'函数如何工作的一些附加文档。 – acattle 2012-07-12 01:34:17