使用MySQL多对多select语句查找相对行

使用MySQL多对多select语句查找相对行,mysql,many-to-many,inner-join,Mysql,Many To Many,Inner Join,我尝试使用内部联接查找相对行 但它似乎什么也没有回报。请告知 基本上,我已经分解了每个文章的原始页面标题和描述中的所有关键字。所以,当我开始搜索时,我可以查询关键字表 这是一篇有关键词的文章 -表模式 CREATE TABLE article ( id INT, title TEXT, description TEXT ); CREATE TABLE keyword ( id INT, keyword VARCHAR(255) ); CREATE TABLE ar

我尝试使用内部联接查找相对行

但它似乎什么也没有回报。请告知

基本上,我已经分解了每个文章的原始页面标题和描述中的所有关键字。所以,当我开始搜索时,我可以查询关键字表

这是一篇有关键词的文章

-表模式

CREATE TABLE article         ( id INT, title TEXT, description TEXT );
CREATE TABLE keyword         ( id INT, keyword VARCHAR(255) );
CREATE TABLE article_keyword ( article_id INT, keyword_id INT );
-增加第1条

insert into article set
id = 1,
title = "my text book like a black hole",
description = "I have a text book. Any people who read it and after days they will disappear. etc...";
-为第1条添加关键字

insert into keyword set
id = 1,
keyword = "text book";

insert into keyword set
id = 2,
keyword = "black hole";

insert into article_keyword set
article_id = 1,
keyword_id = 1;

insert into article_keyword set
article_id = 1,
keyword_id = 2;
-增加第2条

insert into article set
id = 2,
title = "the fact of deep space black hole",
description = "More researches are telling fake story about black holes is exists. But my alien friend tell me it is wrong ... etc";
-为第2条添加关键字

insert into keyword set
id = 3,
keyword = "research";

insert into keyword set
id = 4,
keyword = "alien";

insert into article_keyword set
article_id = 2,
keyword_id = 2;

insert into article_keyword set
article_id = 2,
keyword_id = 3;

insert into article_keyword set
article_id = 2,
keyword_id = 4;
-使用教科书查找,需要1篇文章

SELECT article.id, title FROM article
JOIN article_keyword ak ON ak.article_id = article.id
JOIN keyword k1         ON ak.keyword_id = k1.id
WHERE k1.keyword = "text book"
-使用黑洞寻找,预计2篇文章

SELECT article.id, title FROM article
JOIN article_keyword ak ON ak.article_id = article.id
JOIN keyword k2         ON ak.keyword_id = k2.id
WHERE k2.keyword = "black hole"
-当一本书的搜索包含所有这些关键字时,则不获取任何关键字

SELECT article.id, title FROM article
JOIN article_keyword ak ON ak.article_id = article.id
JOIN keyword k1         ON ak.keyword_id = k1.id
JOIN keyword k2         ON ak.keyword_id = k2.id
WHERE k1.keyword = "text book"
AND   k2.keyword = "black hole";
你知道mysql不能把第一条还给我吗

这个问题有什么问题吗

谢谢大家!

您的前两个SELECT语句工作正常。在最后一个SELECT语句中,使用DISTINCT and In WHERE子句try OR代替and


是的,您的查询是错误的,因为第一个where子句将article_关键字和关键字k1之间的联接限制为关键字为1且article_id为1的行,并且没有行与关键字2的第二个where子句匹配

如果您想要包含多个关键字的文章,可以使用以下查询:

SELECT article.id, title 
FROM article
JOIN article_keyword ak ON ak.article_id = article.id
JOIN keyword k          ON ak.keyword_id = k.id
WHERE k.keyword = "text book"
OR    k.keyword = "black hole"
GROUP BY article.id, title
HAVING COUNT(keyword) = 2

如果目标是查找包含所有指定关键字的文章,这将不起作用,因为这将匹配包含任何而非所有关键字的文章或关键字。
SELECT article.id, title 
FROM article
JOIN article_keyword ak ON ak.article_id = article.id
JOIN keyword k          ON ak.keyword_id = k.id
WHERE k.keyword = "text book"
OR    k.keyword = "black hole"
GROUP BY article.id, title
HAVING COUNT(keyword) = 2