简单的家谱查询
easy family tree query
只有一个table。
Table 姓名 Family_tree.
为 Nick 查询所有 children。 Nick也可以是妈妈!
NAME ID FATHER_ID MOTHER_ID
--------------- ---------- ---------- ----------
Nick 23 25 24
Jane 10 27 26
Perl 15 9 13
Katrin 50 6 12
Sandra 1 3 8
Demi 2 3 8
Deimar 3 7 5
Gandalf 4 6 5
Bill 5 10 23
Kelly 6 22 43
Dolmar 7 11 20
如果您说代码 = 3 表示尼克是此人的父亲:
如果你只想return名字:
SELECT Name FROM table WHERE code = 3
如果您想 return 一切:
SELECT * FROM table WHERE code = 3
我在这句话中键入的“3”可能必须用单引号引起来,具体取决于“代码”字段的数据类型 + 特定的 SQL 方言。
编辑:不太确定我理解这个问题,但 Rajee 的回答可能是正确的。您可以使用别名将 table 加入自身,即 Family_Tree A,Family_Tree B
另一种可能性是子查询。因为我不确定是否理解问题,所以我不知道这是否是您要查找的内容,但将其视为子查询的示例:
SELECT * FROM Family_Tree A WHERE FatherID = (SELECT ID From Family_Tree B WHERE Other Conditions = Other Conditions)
类似的东西,但我的第一个答案或 Rajee 的答案可能会完成更多的澄清。
select t1.name 作为 child, t2.name 作为父亲
来自 table t1
加入 table t2
在 t1.code = t2.father_id
这将给出以下内容o/p
Child Father
______________________________
Nick fill from your tab
Calvin fill from your tab
Sofia Nick
你可以试试下面的代码 -
SELECT
FROM Family_tree T1
JOIN (SELECT ID, FATHER_ID
FROM Family_tree
UNION ALL
SELECT ID, MOTHER_ID
FROM Family_tree) T2 ON T1.ID = T2.FATHER_ID;
可能是这样的:
select name, father_id, mother_id from family_tree
where father_id in
(select id from family_tree
where name = 'Nick')
or mother_id in
(select id from family_tree
where name = 'Nick')
或者如果您只需要尼克作为父亲,那么:
select name, father_id, mother_id from family_tree
where father_id in
(select id from family_tree
where name = 'Nick')
另外,如果你只需要 children ,你不需要使用 connect by...prior for grandchildren, grandgrandchildren,等等
只有一个table。
Table 姓名 Family_tree.
为 Nick 查询所有 children。 Nick也可以是妈妈!
NAME ID FATHER_ID MOTHER_ID
--------------- ---------- ---------- ----------
Nick 23 25 24
Jane 10 27 26
Perl 15 9 13
Katrin 50 6 12
Sandra 1 3 8
Demi 2 3 8
Deimar 3 7 5
Gandalf 4 6 5
Bill 5 10 23
Kelly 6 22 43
Dolmar 7 11 20
如果您说代码 = 3 表示尼克是此人的父亲:
如果你只想return名字:
SELECT Name FROM table WHERE code = 3
如果您想 return 一切:
SELECT * FROM table WHERE code = 3
我在这句话中键入的“3”可能必须用单引号引起来,具体取决于“代码”字段的数据类型 + 特定的 SQL 方言。
编辑:不太确定我理解这个问题,但 Rajee 的回答可能是正确的。您可以使用别名将 table 加入自身,即 Family_Tree A,Family_Tree B
另一种可能性是子查询。因为我不确定是否理解问题,所以我不知道这是否是您要查找的内容,但将其视为子查询的示例:
SELECT * FROM Family_Tree A WHERE FatherID = (SELECT ID From Family_Tree B WHERE Other Conditions = Other Conditions)
类似的东西,但我的第一个答案或 Rajee 的答案可能会完成更多的澄清。
select t1.name 作为 child, t2.name 作为父亲
来自 table t1
加入 table t2
在 t1.code = t2.father_id
这将给出以下内容o/p
Child Father
______________________________
Nick fill from your tab
Calvin fill from your tab
Sofia Nick
你可以试试下面的代码 -
SELECT
FROM Family_tree T1
JOIN (SELECT ID, FATHER_ID
FROM Family_tree
UNION ALL
SELECT ID, MOTHER_ID
FROM Family_tree) T2 ON T1.ID = T2.FATHER_ID;
可能是这样的:
select name, father_id, mother_id from family_tree
where father_id in
(select id from family_tree
where name = 'Nick')
or mother_id in
(select id from family_tree
where name = 'Nick')
或者如果您只需要尼克作为父亲,那么:
select name, father_id, mother_id from family_tree
where father_id in
(select id from family_tree
where name = 'Nick')
另外,如果你只需要 children ,你不需要使用 connect by...prior for grandchildren, grandgrandchildren,等等