Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中使用内部联接时,如何返回唯一行?_Mysql_Sql - Fatal编程技术网

在MySQL中使用内部联接时,如何返回唯一行?

在MySQL中使用内部联接时,如何返回唯一行?,mysql,sql,Mysql,Sql,我有3个表:链接、关键字和关键字链接。一个链接可以有多个关键字,多个链接可以有相同的关键字关键字链接用于连接链接和关键字。 当我运行以下查询时,由于多个关键字匹配,因此返回了同一链接的多行。如何修改此查询以返回唯一行 SELECT links . * FROM `links` INNER JOIN keywords_links ON keywords_links.link_id = id INNER JOIN keywords ON keywords.id = keywords_links

我有3个表:链接、关键字和关键字链接。一个链接可以有多个关键字,多个链接可以有相同的关键字<代码>关键字链接用于连接
链接
关键字
。 当我运行以下查询时,由于多个关键字匹配,因此返回了同一链接的多行。如何修改此查询以返回唯一行

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'
)

最简单的方法是在
选择后放置一个
不同的

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

我从来没有尝试过这种内部连接,但我看不出为什么它不起作用。是关于
DISTINCT
函数如何工作的一些附加文档。