我是第一次进入 SQL 世界的学生,我找不到任何关于如何使用 to_somedatatype(null) 替换 UNION、INTERSECT 等中缺失列的清晰易懂的文档。我正在使用 HR为我的前几个项目内置了 Oracle 数据库的架构,并且以下查询有效(我得到了一个只有那些有家属的员工的employee_id 编号列表):
SELECT employee_id "Employees with Dependents"
FROM employees
INTERSECT
SELECT relative_id
FROM dependents;
但是,一旦我想包含员工的姓名和受抚养人的出生日期,我就被卡住了。此变体执行无错误搜索但不产生任何结果(输出“未选择行”):
SELECT e.employee_id "Employees with Dependents",
e.first_name,
e.last_name,
to_date(NULL) "Dependent Birthdate"
FROM employees e
INTERSECT
SELECT d.relative_id,
TO_CHAR(NULL),
TO_CHAR(NULL),
d.birthdate
FROM dependents d;
将 to_date 替换为 to_number 或只是纯 null 和 to_char 替换为 to_varchar2 或 null 的几种变体无法生成任何行。
我想要为每个受抚养人制作一行,其中显示监护人的雇员编号、名字、姓氏和受抚养人的出生日期。我相信我的问题是这些空占位符的使用,以及对集合运算符的一般理解有限。(我的理解是,当我使用像 to_date(null) 这样的空占位符时,它不会包含在比较中,因为没有什么可以比较的。)
有人可以向我解释如何正确使用这些占位符吗?