从Oracle上的多个表中检索一行[一个或多个表为空]

时间:2016-06-27 23:02:07

标签: sql oracle

当有多个具有不同列的表时,我想将它们全部添加为一条记录。但是,当其中一个没有记录时, 从其他表中检索的其他记录未显示。如何显示剩余表格的结果?例如,我有三个 有一个目录的表格。假设表A没有记录,表B和C有记录。如何显示这些表的结果(表B和C)?即使表A没有记录。

例如:

Table A
 RECN
 FNAME

TABLE B
 RECN
 DATE

TABLE C
 RECN
 ATTR1

Table CAT
 RECN
 LABEL

 SELECT TA.*,TB.*,TC.*
 FROM
 (SELECT A.RECN, A.FNAME, CAT.LABEL
 FROM  A, CAT
 WHERE A.RECN= CAT.RECN) TA,
 (SELECT B.RECN, B.DATE, CAT.LABEL
 FROM B, CAT
 WHERE B.RECN=CAT.RECN) TB,
 (SELECT C.RECN, C.ATTR1, CAT.LABEL
 FROM C, CAT
 WHERE C.RECN=CAT.RECN) TC

现在,我正在获取一个空行,但我必须显示包含值的表的值。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

使用LEFT JOIN。此外,子查询 - 虽然不是问题 - 不是必需的。实际上,您的JOIN语法错误。以下是查询的外观:

SELECT A.RECN, A.FNAME, CAT.LABEL, 
       B.RECN, B.DATE, CAT.LABEL,
       C.RECN, C.ATTR1, CAT.LABEL
FROM TA LEFT JOIN 
     TB
     ON B.RECN = CAT.RECN LEFT JOIN
     TC
     C.RECN = CAT.RECN;