Oracle SQL:与空表联接

Oracle SQL:与空表联接,sql,oracle,join,Sql,Oracle,Join,我说有三个表,它们有一个键,可以链接所有三个表,就像这样 select a.call_id, b.name, c.year from table1 a, table2 b, table3 c where a.call_id = b.call_id and b.call_id = c.call_id and a.call_id = 123 问题是表3没有与id 123匹配的记录,因此整个查询返回0行,即使表1和表2中存在匹配项。有没有一种方法可以让oracle只返回c.year字段的say nu

我说有三个表,它们有一个键,可以链接所有三个表,就像这样

select a.call_id, b.name, c.year
from table1 a, table2 b, table3 c
where a.call_id = b.call_id
and b.call_id = c.call_id
and a.call_id = 123

问题是表3没有与id 123匹配的记录,因此整个查询返回0行,即使表1和表2中存在匹配项。有没有一种方法可以让oracle只返回c.year字段的say null,然后仍然得到a.call\u id和b.name的结果?

我想您只需要翻译一下就可以加入:

SELECT a.call_id, b.name, c.year
from table1 a
JOIN table2 b
ON a.call_id = b.call_id
LEFT JOIN table3 c
ON and b.call_id = c.call_id
WHERE a.call_id = 123

我想你只需要翻译一下就可以加入:

SELECT a.call_id, b.name, c.year
from table1 a
JOIN table2 b
ON a.call_id = b.call_id
LEFT JOIN table3 c
ON and b.call_id = c.call_id
WHERE a.call_id = 123

是的,您必须使用
LEFT
join:

select a.call_id, b.name, c.year
  from table1 a
    JOIN table2 b ON (a.call_id = b.call_id)
    LEFT JOIN table3 c ON (b.call_id = c.call_id)
  WHERE a.call_id = 123;

在此处阅读有关联接的更多信息:

是的,您必须使用
LEFT
join:

select a.call_id, b.name, c.year
  from table1 a
    JOIN table2 b ON (a.call_id = b.call_id)
    LEFT JOIN table3 c ON (b.call_id = c.call_id)
  WHERE a.call_id = 123;

阅读有关连接的更多信息:

虽然您应该使用ANSI SQL,但也可以使用Oracle的方式使用(+)


虽然您应该使用ANSI SQL,但您也可以通过使用(+)使用Oracle的方式


如果不运行多个查询,我可以添加(通过多个查询,我的意思是运行两个完全独立的单独select查询,您需要左外部联接。请参阅,如果不运行多个查询,我可以添加(多个查询是指运行两个彼此完全独立的单独select查询您想要左外部联接。请参阅