我有3个表:链接,关键字和keywords_links。链接可以包含多个关键字,多个链接可以具有相同的关键字。 keywords_links
用于加入links
和keywords
。
当我运行以下查询时,返回同一链接的多行,因为多个关键字匹配。如何修改此查询以返回唯一的行?
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'
)
答案 0 :(得分:1)
最简单的方法是在DISTINCT
之后添加SELECT
:
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