提问人:CShep878 提问时间:10/31/2023 更新时间:10/31/2023 访问量:45
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
问:
我正在为一个班级处理一个 SQL 问题 - “提供学生/家长列表。格式化的子名称、父名称 1、父名称 2。如果子项没有父项,则仅显示 null。
预期结果应如下所示
但是,我无法让结果返回“NULL”值,我只能在没有 null 的地方返回行
利用此代码
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 值的任何帮助将不胜感激
答:
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
- SQL Server 中的左联接与左外联接
- “INNER JOIN”和“OUTER JOIN”有什么区别?
- INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 之间有什么区别?
评论
1赞
codeapplied
11/1/2023
使用外部联接进行查询!我遇到了类似的问题,希望看到这个模型的外部连接以供参考。
评论