使用(+)时,只能在语句中使用一次吗?例如,当我运行此查询时,它给出一个错误:“谓词只能引用一个外部联接表”
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 (+);
答案 0 :(得分:0)
不是“一次声明”,而是“有关联的人” 。
根据使用的情况,(+)可以表示LEFT或RIGHT联接。如果双方都使用,则尝试“左右连接”之类的事情,这是不可能的。
您可以使用C.COURSE_NO (+) = S.COURSE_NO
或C.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;