Oracle ODBC 读取失败并出现左连接

Posted

技术标签:

【中文标题】Oracle ODBC 读取失败并出现左连接【英文标题】:Oracle ODBC read fails with left join 【发布时间】:2018-09-21 11:25:55 【问题描述】:

我有一个小问题,但它让我非常恼火。 我想离开加入一个表,但我只得到 odbc 读取失败的错误。 当我注释掉左连接块时,查询有效。

我很确定没有错字,我很沮丧..

有什么想法吗?

select 
*
from
SYSADM.KATARTIKEL

left join SYSADM.TBLFALL
on SYSADM.KATARTIKEL.ITBROWID = SYSADM.TBLFALL.ITBROWID

where rownum <= 150;

这是错误 它是德文的..

Fehler beim Lesen über ODBC
select 
*
from
SYSADM.KATARTIKEL

left join SYSADM.TBLFALL
on SYSADM.KATARTIKEL.ITBROWID = SYSADM.TBLFALL.ITBROWID

where rownum <= 150

编辑:这个案例的解决方案是创建别名:

select 
    K.*,

    T.ITBROWID as ITID
from
    SYSADM.KATARTIKEL K

left join SYSADM.TBLFALL T
on K.ITBROWID = T.ITBROWID

where 
    rownum <= 150;

编辑:问题是选择 * 你不能选择任何东西然后再加入!

【问题讨论】:

能否请您发布您的错误 请提供错误文本(如果是异常则提供堆栈跟踪) try select 1 from ...: 让我们返回旧的1 而不是*,仅此而已。你还有错误吗? 与 1 我没有得到错误.. 【参考方案1】:

一个明显的问题是您有重复的列名。我建议您明确列出所有列,但您可以使用此快捷方式:

select k.*, f.col1, f.col2
from SYSADM.KATARTIKEL k left join
     SYSADM.TBLFALL f
     on k.ITBROWID = f.ITBROWID
where rownum <= 150;

当然,您可能还有其他问题,例如 SYSADM.TBLFALL 不存在或 ITBROWID 不在两个表中。

请注意,我还介绍了表别名。我强烈建议您在所有查询中使用表别名和限定列名。

【讨论】:

我需要 col1 和 col2 做什么? 您需要 TBLFALL 的哪些列? 目前只有 ITBROWID 那我建议使用SELECT k.*, f.ITBROWID AS TBLFALL_ITBROWID。这至少会消除重复的列名问题。 成功了!谢谢!我现在有个想法,试着用左连接来做

以上是关于Oracle ODBC 读取失败并出现左连接的主要内容,如果未能解决你的问题,请参考以下文章

oracle左连接连表查询

Oracle左连接右连接全外连接(+)号作用

Oracle左连接(+在等号右边),右连接(+在等号左边)

日期字段上的左连接 + Where 子句

我在 oracle sql 中的左连接没有返回左表的每个元素

Oracle左连接