2012-07-12 103 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