我正在尝试从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
答案 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
,则中间表中将没有值。通常需要这样的值。