How to retrieve all grand parents at once(如何一次取回所有祖父母)
本文介绍了如何一次取回所有祖父母的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在sqlite3(家庭债券)中有两个简单的表:
";Person&Quot;(id,fname,lname)
关系&Quot;(父项/子项)
我想让每个孙子孙女和他们所有的祖父母一起(根据孙子孙女的不同,从1个到4个),这样1行结果=
Distinct Grand child, Grand parent 1, Grand parent 2, Grand parent 3, Grand parent 4
多亏了Caius Jard,我才能让每一个孩子和它的祖父母都被问到另一个星空溢出的问题。但是,到目前为止,我有:
1行=孙子辈,1个祖父母(因此最多需要4行才能获得子代的所有祖父母)。
SELECT c.fname, c.lname, gp.fname, gp.lname
FROM relations p_c
INNER JOIN relationships gp_p ON gp_p.child = p_c.parent
INNER JOIN persons gp ON gp.id = gp_p.parent
INNER JOIN persons c ON c.id = p_c.child
ORDER BY c.id;
如何编辑此内容才能将每个孙子孙女与所有祖父母一起放在单行结果中?
如果可能,请仅使用SELECT(+COUNT/DISTINCT)、WHERE(+IN/EXISTS)、INTER/LEFT JOIN、GROUP BY(+HAVING)、ORDER BY。
推荐答案
假设有四个祖父母,您可以枚举并聚合他们:
SELECT fname, lname,
MAX(CASE WHEN seqnum = 1 THEN grandparent_name END) as grandparent_1,
MAX(CASE WHEN seqnum = 2 THEN grandparent_name END) as grandparent_2,
MAX(CASE WHEN seqnum = 3 THEN grandparent_name END) as grandparent_3,
MAX(CASE WHEN seqnum = 4 THEN grandparent_name END) as grandparent_4
FROM (SELECT c.id, c.fname, c.lname,
gp.fname || ' ' || gp.lname as grandparent_name,
ROW_NUMBER() OVER (PARTITION BY c.id ORDER BY gp.fname, gp.lanme) as seqnum
FROM relations p_c JOIN
relationships gp_p
ON gp_p.child = p_c.parent JOIN
persons gp
ON gp.id = gp_p.parent
persons c
ON c.id = p_c.child
) cgp
GROUP BY fname, lname, id;
这篇关于如何一次取回所有祖父母的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:如何一次取回所有祖父母


基础教程推荐
猜你喜欢
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 在多列上分布任意行 2021-01-01
- oracle区分大小写的原因? 2021-01-01
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01