0

我说过 3 个表,其中有一个键可以像这样链接所有三个表...

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 没有与 123 的 id 匹配的记录,因此整个查询返回 0 行,即使表 1 和 2 中有匹配项。有没有办法让 oracle 只返回说 null对于 c.year 字段,仍然可以获得 a.call_id 和 b.name 的结果?

4

3 回答 3

2

我想你只需要把它翻译成 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 and b.call_id = c.call_id
WHERE a.call_id = 123
于 2013-10-25T22:27:15.677 回答
2

是的,你必须使用LEFT加入:

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;

在此处阅读有关联接的更多信息:Jeff Atwood 的联接的视觉解释

于 2013-10-25T22:28:54.987 回答
1

虽然您应该使用 ANSI SQL,但您也可以使用 (+) 以 Oracle 方式执行此操作

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
于 2013-10-26T07:00:33.197 回答