SQL QUERY - 提供学生/家长列表。格式化的子名称、父名称 1、父名称 2。如果子项没有父项,则仅显示 null

SQL QUERY - Provide a student/parent list. Formatted child name, parent name 1, parent name 2. If a child doesn’t have a parent, just display null

提问人:CShep878 提问时间:10/31/2023 更新时间:10/31/2023 访问量:45

问:

我正在为一个班级处理一个 SQL 问题 - “提供学生/家长列表。格式化的子名称、父名称 1、父名称 2。如果子项没有父项,则仅显示 null。

预期结果应如下所示

enter image description here

但是,我无法让结果返回“NULL”值,我只能在没有 null 的地方返回行

enter image description here

利用此代码

SELECT child.name AS Child, parent1.name AS Parent1, parent2.name AS Parent2
FROM Person child 
JOIN Person parent1 ON child.parentID1 = parent1.personID 
JOIN Person parent2 ON child.parentID2 = parent2.personID 
ORDER BY child.name; 

有关如何修改 SQL 以包含 null 值的任何帮助将不胜感激

sql null mysql-workbench 结果集

评论

1赞 Craig 10/31/2023
到目前为止,您在课堂上学到了什么关于 JOIN 的知识?如果您有参考资料来讨论可以在查询中应用的不同类型的 JOIN,以及这些不同的 JOIN 对结果的影响,那么我建议您更深入地研究该主题,您应该能够找到获得预期结果的方法

答:

1赞 Tanny Nguyen 10/31/2023 #1

您正在使用 JOIN,它是 INNER JOIN ( JOIN = INNER JOIN) 的缩写形式。INNER JOIN 只是匹配两个表共有的字段中的值,它不会返回 null 值(如果不存在 ID 父级,则不会返回 NULL)。 因此,在这种情况下,我们需要使用 LEFT JOIN。它将保留子列的所有记录,如果没有现有的父 ID,则返回父列的 null 值。 希望对您有所帮助

2赞 JoyNa 10/31/2023 #2

您可以为每个父项使用 a,这将确保即使子项没有父项,它们仍将包含在具有“NULL”值的结果中。LEFT JOIN

在此处输入图像描述

修改后的查询应如下所示:

SELECT child.name AS Child, parent1.name AS Parent1, parent2.name AS Parent2
FROM Person child 
LEFT JOIN Person parent1 ON child.parentID1 = parent1.personID 
LEFT JOIN Person parent2 ON child.parentID2 = parent2.personID 
ORDER BY child.name;

SQL 查询的类似模板:

SELECT
    s.child_name,
    p1.parent_name AS parent_name_1,
    p2.parent_name AS parent_name_2
FROM
    Students AS s
LEFT JOIN
    Parents AS p1 ON s.child_id = p1.child_id AND p1.parent_number = 1
LEFT JOIN
    Parents AS p2 ON s.child_id = p2.child_id AND p2.parent_number = 2;

您可以阅读更多关于LEFT JOIN

评论

1赞 codeapplied 11/1/2023
使用外部联接进行查询!我遇到了类似的问题,希望看到这个模型的外部连接以供参考。