mysql-递归查询类似的记录

时间:2018-12-20 07:56:10

标签: mysql recursive-query

我有两个具有以下结构的表:

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的记录

应该建立什么查询才能获得这种效果?

你能帮我吗?

2 个答案:

答案 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);