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 Server 的嵌套过程中处理事务? 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01