SQL开发者"与连接图的其余部分断开连接"。

21

我有以下的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
在连接到DB2数据库的Oracle SQL Developer 4.0.0.13中,我在以下斜体文本下方得到了波浪线:"from pluspbillline"和"left outer join workorder"。
警告显示:"pluspbillline与连接图的其余部分断开联系"。这是什么意思?

1
我不熟悉Oracle工具,但你的SQL语句在DB2中看起来很好。你可以考虑尝试使用IBM Data Studio(免费)并查看是否存在任何问题。 - WarrenT
1
就功能而言,这不是问题,我只是想知道这些警告意味着什么。你知道“连接图”是什么吗?谢谢。 - ESP
我在使用Oracle数据库和Cognos 10与SQL Dev进行更简单的连接时遇到了类似的问题。我认为这可能与Framework Manager中表格之间的关系有关(我无法访问),但如果您也遇到了同样的错误,则说明这是SQL Dev“帮助”指示可能存在问题的一部分。 - Rick Henderson
根据我的经验,当查询语句没有问题时,SqlDeveloper会报告这个错误。我认为它是在提示您忘记将一个表连接到查询中的其他表。 - WW.
4个回答

34

我也遇到了这个问题。我不太确定如何表达这种错误,但它似乎基于代码的逻辑流程。

基本上,因为您在之前提到了pluspbillline表而不是workorder表,所以我认为它期望连接应是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所做的工作,所以我只会在你讨厌波浪线的情况下才去修改。


4
我也是第一次在SQL Developer 4.x中看到这个。通过重新排列我的联接顺序,我成功地平息了警告。我遇到了这样一种情况:需要使用连接表从通过第三个表关联的2个表中获取正确的记录集,例如a+b+c,其中b只有两个列b.A-ID和b.C-ID - 我必须这样做:...从b内部连接a on b.A-ID = a.ID 再连接c on b.C-ID = c.ID。 - qxotk

0

我不确定是什么原因导致Oracle SQL Developer出现错误。但我在这里添加注释以正确格式化它。

连接图可能看起来像这样

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

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

我不明白为什么你会收到这个警告。也许是SQL中列名的拼写错误?或者是Oracle界面中的一些怪异之处,它无法正确理解DB2的元数据?我建议尝试IBM的工具,看看是否仅仅是他们的程序问题。


我非常确定查询没有问题,一切都正常。感谢您对图形的解释!这很可能是SQL Developer和DB2之间的某种不兼容性。@a_horse_with_no_name:DB2存储元数据以描述数据库的结构和其他内容,就像媒体库的元数据一样,它不是关系型数据库所必需的。 - ESP
@a_horse_with_no_name,我指的是工具在目录视图中发现的数据。 - WarrenT

0
问题是由于 Oracle 存储过程与您要连接的表上具有相同命名的输入参数所致。
例如,输入参数命名为 bank_nbr 和表 BankDept.bank_nbr 将导致错误,如果您使用 WHERE bank_nbr = BankDept.bank_nbr。 我通过将输入参数重命名为 in_bank_nbr 并更新我的 WHERE 语句以读取 WHERE in_bank_nbr = BankDept.bank_nbr 来解决了这个问题。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接