查询中的SQL(+)表示法

时间:2018-11-06 18:34:00

标签: sql oracle outer-join

使用(+)时,只能在语句中使用一次吗?例如,当我运行此查询时,它给出一个错误:“谓词只能引用一个外部联接表”

SELECT C.COURSE_NO, C.DESCRIPTION, S.SECTION_ID, 
S.COURSE_NO, S.START_DATE_TIME
FROM COURSE C, SECTION S
WHERE C.COURSE_NO (+) = S.COURSE_NO (+);

3 个答案:

答案 0 :(得分:0)

不是“一次声明”,而是“有关联的人”
根据使用的情况,(+)可以表示LEFT或RIGHT联接。如果双方都使用,则尝试“左右连接”之类的事情,这是不可能的。

您可以使用C.COURSE_NO (+) = S.COURSE_NOC.COURSE_NO = S.COURSE_NO (+)

您可以在一个完整的语句中使用多个,例如:

table1.id (+) = table2.id
and
table3.id = table4.id(+)

相关问题:

Oracle what does do in a where clause

Difference between Oracle's plus (+) notation and ansi JOIN notation?

答案 1 :(得分:0)

现在古老的用于外部联接的ANSI以前的标准Oracle语法不支持其他联接类型,例如您试图在两边都let vehicle = { calls: 0, hasEngine: null, getHasEngine: function() { vehicle.calls = vehicle.calls + 1; this.calls = this.calls + 1; return this.hasEngine; }, canFly: null, getCanFly: function() { vehicle.calls = vehicle.calls + 1; this.calls = this.calls + 1; return this.canFly; } } let boat = Object.create(vehicle); boat.canFly = false; let sailboat = Object.create(boat); sailboat.hasEngine = false; let fishingBoat = Object.create(boat); fishingBoat.hasEngine = true; console.log(vehicle.calls); // 0 console.log(boat.calls); // 0 console.log(sailboat.calls); // 0 sailboat.getHasEngine(); console.log(vehicle.calls); // 1 console.log(boat.calls); // 1 console.log(sailboat.calls); // 2进行的完全外部联接。

支持不破坏旧代码。您不应该将其用于新代码-使用ANSI SQL标准JOIN语法。

(+)

答案 2 :(得分:0)

听起来您想进行完全外部联接。在标准ANSI中看起来像这样:

SELECT C.COURSE_NO, C.DESCRIPTION, S.SECTION_ID, 
S.COURSE_NO, S.START_DATE_TIME
FROM COURSE C 
FULL OUTER JOIN SECTION S
ON C.COURSE_NO = S.COURSE_NO;