【问题标题】:SQL Developer "disconnected from the rest of the join graph"SQL Developer“与连接图的其余部分断开连接”
【发布时间】:2013-12-13 02:04:46
【问题描述】:

我有以下 SQL:

select <misc things>
from pluspbillline 
left outer join workorder 
    on workorder.siteid=pluspbillline.siteid 
    and workorder.wonum = pluspbillline.refwo
    and workorder.orgid = pluspbillline.orgid
left outer join ticket
    on ticket.ticketid = pluspbillline.ticketid
    and ticket.class=pluspbillline.ticketclass
left outer join pluspsalesorder
    on pluspsalesorder.salesordernum=pluspbillline.salesordernum
    and pluspsalesorder.siteid=pluspbillline.siteid

在 Oracle SQL Developer 4.0.0.13(连接到 DB2 数据库)中,我在以下斜体下方看到一条波浪线:“from pluspbillline”和“left outer join workorder em>”。

警告说“pluspbillline 已与连接图的其余部分断开连接”。这是什么意思?

【问题讨论】:

  • 我不熟悉 Oracle 工具,但您的 SQL 看起来很适合 DB2。您可以考虑尝试 IBM Data Studio(免费),看看是否有任何问题。
  • 这不是功能方面的问题,我只是想知道这些警告的含义。你知道什么是“连接图”吗?干杯
  • 我遇到了一个类似的问题,即使用 Oracle Database 和 Cognos 10 与 SQL Dev 进行更简单的连接。我认为这与 Framework Manager 中表的关联方式有关(我无法访问),但如果您遇到相同的错误,那么它是 SQL Dev 的“帮助”的一部分,指示可能存在问题的地方。
  • 根据我的经验,当查询没有问题时,SqlDeveloper 会报告此错误。我认为它试图表明您忘记将表连接到查询中的其他表。

标签: sql db2 oracle-sqldeveloper


【解决方案1】:

我也收到了。我不确定如何表达它,但错误似乎是基于代码的逻辑流程。

基本上是因为您在workorder 之前提到了表pluspbillline,我认为它期望连接是on pluspbillline.siteid=workorder.siteid 等。

似乎连接条件的顺序应该从第一个确定的表流到最新的表。所以以下应该让它快乐:

plusbillline to workorder       on pluspbillline.siteid=workorder.siteid...
    ""       to ticket          on pluspbillline.ticketid = ticket.ticketid...
    ""       to pluspsalesorder on pluspbillline.salesordernum = pluspsalesorder.salesordernum...

我不相信这会改变 oracle 所做的工作(假设您不使用优化器提示),所以如果您讨厌波浪线,我只会费心去改变。

【讨论】:

  • 我也是第一次在 SQL Developer 4.x 中看到这个。我能够通过重新安排我的加入顺序来安抚警告。我有这种情况,我必须使用连接表从两个相关的表中获取正确的记录集到第三个,例如a + b + c 其中 b 只有 2 列 bA-ID 和 bC-ID - 我必须有: ...from b inner join a on bA-ID = a.ID inner join c on bC-ID = c。身份证
【解决方案2】:

我不确定是什么导致 Oracle SQL Developer 给出错误。但我把这条评论放在这里是为了正确格式化它。

连接图可能看起来像这样

pluspbillline  ------+----<  workorder
                     |
                     +----<  ticket
                     |
                     +----<  pluspsalesorder

图表上的线条可能会标有连接字段。但这给了你一个基本的想法。

我看不出您收到此警告的任何原因。您的 SQL 中可能存在列名拼写错误?还是 Oracle 界面中的一些怪癖导致它无法正确理解 DB2 元数据?我建议尝试 IBM 的工具,看看它是否只是他们的程序。

【讨论】:

  • 我很确定查询没有问题,一切正常。感谢图表的解释!这很可能是 SQL Developer 和 DB2 之间的一些不兼容。 @a_horse_with_no_name :DB2 存储元数据来描述数据库的结构和其他内容,就像媒体库的元数据一样,关系数据库不需要它。
  • @a_horse_with_no_name 我指的是工具将在catalog views 中找到的数据。
【解决方案3】:

此问题是由 Oracle 过程与您要加入的表上的列具有相同的命名输入参数引起的。
即名为 bank_nbr 的输入参数和表 BankDept.bank_nbr 将导致错误,如果您有 WHERE bank_nbr = BankDept.bank_nbr 我通过将输入参数重命名为 in_bank_nbr 并更新我的读取位置来解决问题 WHERE in_bank_nbr = BankDept.bank_nbr

【讨论】:

    【解决方案4】:

    将鼠标悬停在“LEFT”字上时,我收到了相同的消息,但整个查询运行没有问题。另一方面,当我将鼠标悬停在“WITH”上时,我得到了一条关于重组整个查询的建议。因此,关于断开连接的消息可能不是错误的迹象,而是对句子过于复杂的警告。 SQLDeveloper 的编辑并没有提到问题的级别。

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 2021-01-27
      • 2012-11-08
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多