第3行错误:ORA-00933:SQL命令未正确结束
我正在运行下面的第3行错误:ORA-00933:SQL命令未正确结束,sql,oracle,Sql,Oracle,我正在运行下面的SELECT语句: 从标准价目表返回价格customer=0 如果客户被报了一个特价customer=X,则改用该价格 我收到错误消息: ERROR at line 3: ORA-00933: SQL command not properly ended Oracle版本为:Oracle8i企业版8.1.7.4.0版-生产版 SELECT glas_daten_basis.idnr, glas_daten_basis.gl_bez, NVL(p2.zum2, p1.zu
SELECT
语句:
customer=0
customer=X
,则改用该价格ERROR at line 3:
ORA-00933: SQL command not properly ended
Oracle版本为:Oracle8i企业版8.1.7.4.0版-生产版
SELECT glas_daten_basis.idnr, glas_daten_basis.gl_bez, NVL(p2.zum2, p1.zum2)
FROM glas_daten_basis
JOIN os_przu p1 ON p1.idnr = glas_daten_basis.idnr
LEFT JOIN os_przu p2 ON p2.idnr = glas_daten_basis.idnr AND p2.kunr = 63
WHERE p1.kunr = 0;
第3行是连接
,这里有什么问题吗
更新:标准价目表中有137行,因此无论价格来自customer=0
还是customer=X
,都应该给我137行。由于某种原因,到目前为止的答案给了我大约60行
SELECT os_przu.idnr, os_przu.zum2
FROM os_przu
WHERE os_przu.kunr = 0;
...
137 rows selected.
类似这样的,我没有测试代码,但是你得到了。(+)表示左连接。有关更多信息,请使用谷歌搜索“Oracle8 left join”
类似这样的,我没有测试代码,但是你得到了。(+)表示左连接。有关更多信息,请使用谷歌搜索“Oracle8 left join”
正如@a_horse-with_no_name所说,ANSI连接在8i中不起作用;他们直到9点才加入。因此,如果您真的停留在这个古老且不受支持的版本上,您将停留在旧的Oracle特定语法上:
SELECT glas_daten_basis.idnr, glas_daten_basis.gl_bez, NVL(p2.zum2, p1.zum2)
FROM glas_daten_basis, os_przu p1, os_przu p2
WHERE p1.idnr = glas_daten_basis.idnr
AND p1.kunr = 0
AND p2.idnr (+) = glas_daten_basis.idnr
AND p2.kunr (+) = 63;
这与@nelucon的答案非常相似,不同的是只有一个(+)
左连接标记,并且它位于条件的错误一侧
(+)
是外部联接表的条件,它必须应用于外部联接表的每个条件-如果缺少一个条件,则忽略其余条件,并且它实际上再次成为内部联接。(ANSI联接更容易使用的原因之一,尽管通过参考where
子句中的联接表以及on
中的)仍然可能出错。正如@a_horse-with_no_name所说,ANSI联接在8i中不起作用;他们直到9点才加入。因此,如果您真的停留在这个古老且不受支持的版本上,您将停留在旧的Oracle特定语法上:
SELECT glas_daten_basis.idnr, glas_daten_basis.gl_bez, NVL(p2.zum2, p1.zum2)
FROM glas_daten_basis, os_przu p1, os_przu p2
WHERE p1.idnr = glas_daten_basis.idnr
AND p1.kunr = 0
AND p2.idnr (+) = glas_daten_basis.idnr
AND p2.kunr (+) = 63;
这与@nelucon的答案非常相似,不同的是只有一个(+)
左连接标记,并且它位于条件的错误一侧
(+)
是外部联接表的条件,它必须应用于外部联接表的每个条件-如果缺少一个条件,则忽略其余条件,并且它实际上再次成为内部联接。(ANSI联接更容易使用的原因之一,尽管通过引用where
子句中的联接表以及on
中的仍然可能会出错)Oracle 8不支持显式联接。您需要从此服务器升级到Oracle版本century@a_horse_with_no_name有解决办法吗?这是我们的应用程序销售的嵌入式数据库版本。我无法控制它。内部连接,左连接,右连接,完全外部连接,自然连接,交叉连接。。。(从开始join之后的行需要定义join类型。Oracle 8不支持显式的join
s。您需要从该行升级到Oracle版本。)century@a_horse_with_no_name有解决办法吗?这是我们的应用程序销售的嵌入式数据库版本。我无法控制它。内部连接,左连接,右连接、完全外部连接、自然连接、交叉连接…(从该连接开始后的行需要定义连接类型。最终的p2.numr=6
有效地将其转换回内部连接。这需要是p2.kunr=63(+)
@AlexPoole原始答案无论如何都不会返回正确的行数(检查问题中的更新),但是当我添加最后一个(+)
您建议我在第6行得到错误消息error:ORA-00933:SQL命令没有正确结束
@user3805423-抱歉,复制了答案的位置;左侧连接应该在另一侧。最后的p2.numr=6
有效地将其转换回内部连接。这需要是p2.kunr=63(+)
@AlexPoole原始答案无论如何都不会返回正确的行数(请检查问题中的更新),但当我添加最后一个(+)
您建议我在第6行获得错误消息error:ORA-00933:SQL命令未正确结束
@user3805423-抱歉,复制了答案的位置;左侧连接应该在另一侧。