gpt4 book ai didi

oracle - Oracle 中的家谱查询

转载 作者:行者123 更新时间:2023-12-02 07:36:56 25 4
gpt4 key购买 nike

我正在尝试从 Oracle 数据库中获取动物谱系树。

这是表格:

Animal
------------------------
Animal_ID
Parent_Male_ID
Parent_Female_ID
....
....
------------------------

如果我指定一种动物,我可以使用如下方式获取其所有后代(在雄性方面):

SELECT *
FROM animal
START WITH animal_id = 123
CONNECT BY PRIOR animal_id = parent_male_id

我正在尝试找到一种方法来扩展它,如果我指定一种动物,它将获取 parent 双方,然后获取其所有后代。

有什么想法吗? (这是Oracle 9.2)

最佳答案

SELECT  *
FROM animal
START WITH
animal_id IN
(
SELECT parent_male_id
FROM animal
WHERE animal_id = 123
UNION ALL
SELECT parent_female_id
FROM animal
WHERE animal_id = 123
)
CONNECT BY
PRIOR animal_id IN (parent_male_id, parent_female_id)

但是,这个查询会非常慢。

最好使用这个:

SELECT  DISTINCT(animal_id) AS animal_id
FROM (
SELECT 0 AS gender, animal_id, father AS parent
FROM animal
UNION ALL
SELECT 1, animal_id, mother
FROM animal
)
START WITH
animal_id IN
(
SELECT father
FROM animal
WHERE animal_id = 9500
UNION ALL
SELECT mother
FROM animal
WHERE animal_id = 9500
)
CONNECT BY
parent = PRIOR animal_id
ORDER BY
animal_id

,它将使用HASH JOIN并且速度更快。

有关性能详细信息,请参阅我的博客中的此条目:

关于oracle - Oracle 中的家谱查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/782928/

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