我有两个具有以下结构的表:
create table article (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
title varchar(50) NOT NULL,
text text,
date timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;
create table article_relate (
article_id_1 int NOT NULL,
article_id_2 int NOT NULL
);
表“文章”中的示例记录
id title -------------------------------------- 1 About Ferrari 2 About Lamborghini 3 About my friends 4 About my kitchen
在第二个表“ article_relates”中,我描述了第一个表中类似主题记录的关系。
article_id_1 article_id_2 ----------------------------------- 1 2 2 1
当我添加下一篇文章时,我会将其链接到有关相同主题的第一篇文章。
Insert into article (id, title) values (5, 'About Maserati');
以及指向ID = 2的类似文章的链接
Insert into article_relate (article_id_1, article_id_2) values (5, 2);
Insert into article_relate (article_id_1, article_id_2) values (2, 5);
现在,我想向数据库发送查询,以获取与有关ID = 5的文章相关的所有条目。而且,与与有关ID = 2的文章相关的条目也相关联。该查询的结果应为ID为5、2和1的记录
应该建立什么查询才能获得这种效果?
你能帮我吗?
答案 0 :(得分:0)
听起来像JOIN子句:
SELECT article.id,
article.name,
article_relate.id AS article_relate_id
FROM article
LEFT JOIN article_relates ON article.id = article_relate.article_id_1
OR article.id = article_related
WHERE article.id = 5
将列出文章编号5的所有相关文章。这对您有帮助吗?
关于在mysql中加入-https://dev.mysql.com/doc/refman/8.0/en/join.html
答案 1 :(得分:0)
您可以在内部选择查询中简单地使用选择。
SELECT article.id,article.name FROM article WHERE article.id IN (SELECT article_id_2 from article_relate where article_id_1 = 5);