gpt4 book ai didi

用于检查两个人是否有共同祖先的sql函数

转载 作者:行者123 更新时间:2023-12-04 04:37:34 27 4
gpt4 key购买 nike

我必须解决以下问题:创建一个 sql 函数来检查两个人是否有共同的祖先,但我被卡住了。
我创造

create type person as object
(
first_name varchar2(10),
last_namevarchar2(10)
);

和人员表
create table client_iulia
(Person_Id varchar2(13)constraint pk_id_client primary key,
Mother_Id varchar2(13),
Father_Id varchar2(13),
Name person);

我想要做的是一个带有三个参数(两个人和搜索级别)的函数,如果有共同的祖先,则返回 1,否则返回 0)
请,如果有人有任何想法,请帮助我。
对不起,我的英语不好。

最佳答案

递归CTE是要走的路。我认为这是最容易理解的。可能有更快的方法,但这应该很清楚它是如何工作的。我无权访问 oracle 服务器,所以我可能有错别字,我在下面展示了两个步骤,以便您可以测试并了解它是如何工作的。

1) 查找单个输入的所有祖先

with ancestors as
(
SELECT *
FROM client_iulia
WHERE Person_Id = @inputPerson
UNION ALL
SELECT *
FROM client_iulia
JOIN ancestors a on Person_ID = a.Mother_ID OR Person_ID = a.Father_ID
)
SELECT *
FROM ancestors

2)找到两个目标的所有祖先
with ancestorsA as
(
SELECT *
FROM client_iulia
WHERE Person_Id = @inputPersonA
UNION ALL
SELECT *
FROM client_iulia
JOIN ancestorsA a on Person_ID = a.Mother_ID OR Person_ID = a.Father_ID
), ancestorsB as
(
SELECT *
FROM client_iulia
WHERE Person_Id = @inputPersonB
UNION ALL
SELECT *
FROM client_iulia
JOIN ancestorsB a on Person_ID = a.Mother_ID OR Person_ID = a.Father_ID
)
SELECT A.*
FROM ancestorsA A
JOIN ancestorsB B ON A.Person_Id = B.Person_Id

关于用于检查两个人是否有共同祖先的sql函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480403/

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