源表:
目标表:
源表建表代码:
CREATE TABLE Personnel
(employee varchar(32),
child_1 varchar(32),
child_2 varchar(32),
child_3 varchar(32),
PRIMARY KEY(employee));
INSERT INTO Personnel VALUES('赤井', '一郎', '二郎', '三郎');
INSERT INTO Personnel VALUES('工藤', '春子', '夏子', NULL);
INSERT INTO Personnel VALUES('铃木', '夏子', NULL, NULL);
INSERT INTO Personnel VALUES('吉田', NULL, NULL, NULL);
解题思路:
先建立子女列表的视图,再以员工列表为主表进行外连接操作。
CREATE VIEW Children(child)
AS SELECT child_1 FROM Personnel
UNION
SELECT child_2 FROM Personnel
UNION
SELECT child_3 FROM Personnel;
/* 获取员工子女列表的SQL语句(没有孩子的员工也输出) */
SELECT EMP.employee, CHILDREN.child
FROM Personnel EMP
LEFT OUTER JOIN Children
ON CHILDREN.child IN (EMP.child_1, EMP.child_2, EMP.child_3);
当表 Personnel 里“孩子 1~孩子 3”列的名字存在于 Children 视图里时,返回该名字,否则返回 NULL。
对上述谓词in的用法不是很理解,有懂的大佬,还望指点一二。
——————
参考资料:《SQL进阶教程》