Oracle SQL Outer Left Join不返回行

时间:2016-08-08 03:18:56

标签: sql oracle

我正在尝试在oracle数据库中映射3个表:

testHdr, testDet, testOther

testHdr是头表,testDet是详细信息表,testOther只是我需要从中获取几列的补充表。

testHdr中可能存在数据但testDet中没有数据。如果没有值,我想显示testDet中的空/空值。

将testHdr映射到testDet的键是adj_no和adj_no2

SELECT hdr.*, det.*, othr.*  
FROM testHdr hdr, testDet det, testOther othr
where hdr.adj_no = det.adj_no (+)
and hdr.adj_no2 = det.adj_no2 (+)
and i.key3 = det.key3 
and hdr.adj_no = '112'

* 112只有标题记录但没有详细记录

  • 我希望得到hdr.adj_no = 112的数据,如果有113,114等标题数据,它就不会在查询结果中显示。

我尝试使用外部左连接进行上述查询,但显示:

ORA-01416: two tables cannot be outer-joined to each other

1 个答案:

答案 0 :(得分:2)

您应该使用明确的左连接:

testOther

在原始查询中,您从未为ON表指定任何连接条件,这意味着您正在对该表进行交叉连接。虽然这不会影响您的实际问题,但如果不打算使用交叉连接,则应添加限制此连接的$ScriptBlock = { $sb } 子句。

大多数数据库世界已经偏离您使用的隐式连接语法的一个原因正是因为它使得很难看到正在连接的内容,并且它也更容易错过连接条件。