同一请求中的多个外部联接
Posted
技术标签:
【中文标题】同一请求中的多个外部联接【英文标题】:Multiple outer join in the same request 【发布时间】:2011-05-14 15:12:56 【问题描述】:我想与其他 3 人在一张表上进行多重外连接。连接是 niddeclaration。目标是在我的模式中获得与它相关的所有内容的声明。现有代码使用旧语法进行了一次外连接:其中 A.x= B.x (+)。 'new' 语法左外连接似乎完全一样。我的问题是在同一个请求中多次使用它。似乎我不能使用唯一的“declaration d”标识符,这就是为什么我使用 3 个不同来做同样的事情而不是一个。
select *
FROM entreprise e,
calendrier m,
statut s,
lignedeclaration l,
categoriedeclaration c,
declaration d left OUTER JOIN saisiecategoriedeclaration sc on d.niddeclaration = sc.niddeclaration ,
declaration de left OUTER JOIN saisielignedeclaration sl on de.niddeclaration = sl.niddeclaration,
declaration dl left OUTER JOIN reglement r on dl.niddeclaration = r.niddeclaration
WHERE (d.nidentreprise = e.nidentreprise)
AND d.niddeclaration = 12314689
and de.niddeclaration = 12314689
and dl.niddeclaration = 12314689;
简而言之,我想在同一个请求中进行 2 次普通连接和 3 次外部连接。与同一个“左”表的 3 个外连接。
【问题讨论】:
请重新表述您的问题并重新缩进您的查询,目前还不清楚。 您的查询缺少 CALENDRIER、STATUT、LIGNEDECLARATION 和 CATEGORIEDECLARATION 表的 JOIN 条件。 【参考方案1】:您无需重新包含declaration
。
declaration d
left OUTER JOIN saisiecategoriedeclaration sc on d.niddeclaration = sc.niddeclaration
left OUTER JOIN saisielignedeclaration sl on d.niddeclaration = sl.niddeclaration
left OUTER JOIN reglement r on d.niddeclaration = r.niddeclaration
注意省略逗号。您可能还需要重写查询中的其他表以使用现代连接语法,我不确定如果您尝试混合这些语法会发生什么。
【讨论】:
您收到此错误:“ORA-25156:旧式外连接 (+) 不能与 ANSI 连接 25156 一起使用。00000 - “旧式外连接 (+) 不能与 ANSI 连接一起使用” . 当查询块使用 ANSI 样式连接时,不能使用用于指定外连接 (+) 的旧符号。*操作:也使用 ANSI 样式来指定外连接。错误在行:30 列:36" --> this,但是,仅影响 where 子句中的左/右连接,您仍然可以在 where *Cause: 内进行内部“旧式”连接以上是关于同一请求中的多个外部联接的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MEAN 应用程序中的同一 HTTP 请求中调用多个方法