Mysql 如何在一个查询中链接SQL select结果?
我在选择与孩子/家长关系有关的多个结果时遇到困难。以下是带有类别树的表格。类别表表示关系,而类别名称表包含名称字符串:Mysql 如何在一个查询中链接SQL select结果?,mysql,sql,Mysql,Sql,我在选择与孩子/家长关系有关的多个结果时遇到困难。以下是带有类别树的表格。类别表表示关系,而类别名称表包含名称字符串: [category] [category_name] id, id_parent id, name ------------- -------------- 1 NULL 1 'animal' 2 1 2
[category] [category_name]
id, id_parent id, name
------------- --------------
1 NULL 1 'animal'
2 1 2 'mammal'
3 2 3 'lion'
4 2 4 'sea_creature'
5 4 5 'lion'
作为输入,我有名字,必须翻译成id。层次结构正好有3个层次。例如:动物,哺乳动物,狮子,->1,2,3
正如你们所看到的,狮子的名字用于不同的类别。但是,上级类别是唯一的,子类别的名称在一个父类别中是唯一的
我可以进行三个单独的查询,从animal开始,然后重用其id与后续查询的id\u父项进行比较:
问题1:
SELECT
cn.id
FROM
category_name cn
WHERE
cn.name = 'animal'
将此查询的结果保存在变量父级中
问题2:
SELECT
cn.id
FROM
category_name cn
INNER JOIN category c ON cn.id = c.id
WHERE
cn.name = 'mammal' AND c.id_parent = <parent>
等等。但我相信有更好的方法来做到这一点
谢谢。我想这就是你想要的:
SELECT c1.id, c2.id, c3.id
FROM category c1
JOIN category c2 ON c1.id = c2.id_parent
JOIN category c3 ON c2.id = c3.id_parent
JOIN category_name cn1 ON c1.id = cn1.id
JOIN category_name cn2 ON c2.id = cn2.id
JOIN category_name cn3 ON c3.id = cn3.id
WHERE cn1.name = 'animal' AND cn2.name = 'mammal' AND cn3.name = 'lion'
输出
| C1ID | C2ID | C3ID |
|------|------|------|
| 1 | 2 | 3 |
小提琴
作为补充说明,我建议您在谷歌上搜索嵌套集和邻接列表。谢谢!这正是我所需要的。你可以使用UNION,并且在使用它时确保性能。