使用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