2014-07-04 30 views
0

我正在下面SELECT声明:ERROR位于第3行:ORA-00933:SQL命令不能正确地结束

  1. 返回的价格从标准价格表customer = 0
  2. 如果客户已经引述特价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号线为JOIN,是有什么问题吗?

更新:有137行的标准价格表,所以我应该给不管价格是否从customer = 0customer = X 137行。由于某种原因,迄今为止的答案给了我约60行。

SELECT  os_przu.idnr, os_przu.zum2 
FROM  os_przu 
WHERE  os_przu.kunr = 0; 
... 
137 rows selected. 
+1

Oracle 8不支持显式的“JOIN” 。您需要升级到本世纪的Oracle版本 –

+0

@a_horse_with_no_name有没有解决方法?这是与我们的应用程序一起销售的嵌入式数据库版本。我无法控制它。 – user3805423

+0

INNER JOIN,LEFT Join,Right Join,FUll Outer JOin,自然连接,交叉连接...(从该连接开始的行开始连接需要定义连接类型)http://docs.oracle.com/javadb/10.6 .1.0/ref/rrefsqlj29840.html – xQbert

回答

2

正如@ a_horse-with_no_name说,ANSI连接不8I工作;直到9i才加入它们。所以,如果你真的卡在这片古老而不受支持的版本要你坚持老的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的答案,但只有一个(+)左加盟标记,它是在条件错误的一面。

SQL Fiddle

(+)Oracle-specific outer-join operator,它必须应用于外连接表的每个条件 - 如果错过了其余条件,则其余条件将被忽略,并且它将再次成为内连接。 (ANSI加入的其中一个原因更容易处理,尽管通过参考where子句中的连接表以及on,仍然可能会导致错误。)

0

这样的事情,我没有测试代码,但你明白了。 (+)表示左连接。更多相关信息,谷歌为 “甲骨文8人加入”

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.kunr = 0 
AND  p1.idnr = glas_daten_basis.idnr 
AND  p2.idnr = glas_daten_basis.idnr (+) 
AND  p2.kunr = 6; 
+0

最后的'p2.numr = 6'实际上将它转换回内部连接,需要'p2.kunr = 63(+)'。 –

+0

@AlexPoole原始答案不会不管怎样返回正确的行数(检查问题中的更新),但是当我添加你提示的最后一个'(+)'时,我会收到错误消息'ERROR at line 6:ORA-00933:SQL command not正确地结束了。 – user3805423

+0

@ user3805423 - 对不起,复制了答案的位置;左边的连接应该在另一边。 –

相关问题