我可以同时使用正确的外部联接和内部联接吗?

时间:2020-04-30 20:16:36

标签: sql inner-join

我正在尝试从3个表中获取数据,但我想我需要使用内部联接(以联接TABLE1和TABLE2)和正确的外部联接,因为我需要TABLE3的所有信息,但我不知道该怎么做它。我尝试过:

select a.TABLE1_ID, e.TABLE2_ID,f.TABLE3_ID
from TABLE1 as a, TABLE2 as e, TABLE3 as f
where a.TABLE1_ID = e.TABLE2_ID and a.TABLE1_COL = f.TABLE3_ID
UNION ALL
SELECT f.TABLE3_ID, NULL
FROM TABLE3 as f
WHERE NOT EXISTS (
    SELECT * FROM TABLE1 as a
    WHERE a.TABLE1_COL = f.TABLE3_ID);

但是我得到以下错误: 集合运算符或VALUES子句的操作数没有相同的列数。SQLCODE = -421,SQLSTATE = 42826,DRIVER = 4.19.56

我该怎么办?有可能吗?

**编辑: 以下是我想要得到的结果:

a.TABLE1_ID | e.TABLE2_ID | f.TABLE3_ID
----------------------------------------
AFR123      | AFR123      | MM145FR123
AFR124      | AFR124      | MM145FR124
NULL        | NULL        | MM145FR125
NULL        | NULL        | MM145FR126  

1 个答案:

答案 0 :(得分:0)

您正在描述LEFT JOIN

select a.TABLE1_ID, e.TABLE2_ID, f.TABLE3_ID
from TABLE3 f left join
     TABLE1 a
     ON a.TABLE1_ID = f.TABLE3_ID left join
     TABLE2 e 
     on a.TABLE1_ID = e.TABLE2_ID ; 

请注意:如果a中有一行与f匹配,但在e中没有匹配的行,则这将保留a中的值。如果使用INNER JOIN后跟RIGHT JOIN,则中间表中将没有值。通常需要这样的值。