gpt4 book ai didi

mysql - 如何在一个查询中链接 SQL 选择结果?

转载 作者:行者123 更新时间:2023-11-29 01:59:03 25 4
gpt4 key购买 nike

我在选择具有子/父关系的多个结果时遇到困难。这是带有类别树的表格。 category 表表示关系,而 category_name 表包含名称字符串:

[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 层深。例如:animal, mammal, lion, -> 1, 2, 3

如您所见,lion 名称用于不同的类别。但是,上层类别是唯一的,子类别的名称在一个父类别中是唯一的。

我可以进行三个单独的查询,从 animal 开始,然后重新使用它的 id 与后续查询的 id_parent 进行比较:

查询#1:

SELECT
cn.id
FROM
category_name cn
WHERE
cn.name = 'animal'

(将此查询的结果保存在变量 parent 中)

查询#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 |

fiddle here .

作为旁注,我建议您使用 Google 搜索“嵌套集”和“邻接列表”。

关于mysql - 如何在一个查询中链接 SQL 选择结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com