微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连接两个表sqlplus,共享列名,返回NULL

如何解决连接两个表sqlplus,共享列名,返回NULL

我有三个要加入的表

学生编号,名字,姓氏,club_id,club_name。

有些成员在一个俱乐部中处于活动状态,但在另一个俱乐部中处于非活动状态,因此该成员将同时出现在活动和非活动表中。还有一个不在任何俱乐部中活跃的成员,但是我需要返回他们的ID,first_name和last_name。 我的代码当前未在club_id中返回带有NULL的成员信息。

active_member(student_id(PK),first_name,last_name,club_id(FK))

inactive_member(student_id(PK),club_id(FK))

member_club(club_id(PF),club_name,) 

SELECT a.student_id,a.first_name,a.last_name,c.club_id,c.club_name
FROM active_member a,member_club c
WHERE c.club_id = a.club_id
UNION ALL
SELECT b.student_id,b.first_name,b.last_name,c.club_name
FROM member_club c,inactive_member b
WHERE c.club_id = b.club_id;

解决方法

不能将NULLs作为一个值进行比较,因为null表示该值不存在。

您可以用方括号括起来并使用OR NULL检查...

OR,我更喜欢使用NVL()并将其转换为值(例如当它不存在时),例如NVL(c.club_id,-1) = NVL(b.club_id,-1)

以下是显示NVL()选项的小提琴示例: http://sqlfiddle.com/#!4/f41750/9/0

---更新:---

以上假设联接表中存在一行。如果该行不存在,则需要外部连接表。 例如在可能没有一行的表格后面使用(+),例如

SELECT a.student_id,a.first_name,a.last_name,c.club_id,c.club_name
FROM active_member a,member_club c
WHERE c.club_id = a.club_id(+)
UNION ALL
SELECT b.student_id,b.first_name,b.last_name,c.club_name
FROM member_club c,inactive_member b
WHERE c.club_id = b.club_id(+);

我不知道您的数据,因此您需要将其应用于正确的表格。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。