mysql在同一个表上选择join

643ylb08  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(302)

我的mysql数据库中有一个表:

CREATE TABLE `Category` (
  `category_id` int(11) NOT NULL,
  `title` varchar(20) COLLATE utf8_bin NOT NULL,
  `parent_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

这个 parent_id 符合 category_id 表的类型(递归):

category_id title   parent_id
1           David   0
2           Lenny   1
3           Tom     1
4           John    3
5           Donald  4
6           Kelly   2

我想在表上选择,但要将父项id作为标题,可以这样执行join select吗?它不会产生任何缓慢的问题吗?

wooyq4lh

wooyq4lh1#

您可以将一个表连接到它本身。这里有一个你可以使用的查询;您可能需要稍微修改它以获得所需的精确列。

select
  child.title `child`,
  parent.title `parent`
from
       Category `child`
  join Category `parent` on `child`.parent_id = `parent`.category_id
;

该查询将返回以下结果:

child   parent
--------------
Lenny   David
Tom     David
John    Tom
Donald  John
Kelly   Lenny

下面是一个sql小提琴,您可以使用它:http://sqlfiddle.com/#!9/a254cb/3号
编辑:如果你关心没有父母的大卫,这里有一个左连接的版本:http://sqlfiddle.com/#!9/a254cb/4号
edit:不,对于这样一个带有简单联接的小表,没有性能问题。

相关问题