首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询(Oracle SQL)

SQL查询(Oracle SQL)
EN

Stack Overflow用户
提问于 2017-11-08 14:50:52
回答 2查看 72关注 0票数 1

我需要一些关于以下SQL查询的帮助:

代码语言:javascript
复制
SELECT   AUF_EK.FIRM,   AUF_EK.customer,   AUF_EK.cnr,   k.name1,  
 k.name2,   k.name3,   k.street,   k.pin,   k.loc,   r.name1,  
 r.name2,   r.name3,   lo_gpname1,

.

首先是选定的列,到目前为止,我了解到这一点。

代码语言:javascript
复制
 FROM   AUFT,   PARTNER r,   PARTNER k, ....   skp_ARTIKEL_Z,

那么我们有from子句,但是为什么有一个合作伙伴r合作伙伴k?这是否意味着表名是"Partner r“,还是我还不知道的另一个原因?

代码语言:javascript
复制
 WHERE   (
     AUF.FIRM BETWEEN 123 AND 456   AND AUF.FIRM                   = k.FIRM   AND AUF.customer                   = k.gpnr   AND AUF.FIRM  
 = k.FIRM   AND AUF.customer                   = k.gpnr   AND AUF.art_nr = ART.art_nr    

where子句对我来说很有意义,所以它基本上匹配所选表中的列.

代码语言:javascript
复制
 AND EK_POS.art_nr              =
 ARTIKEL_Z.art_nr(+)   AND NVL
  (POS.pos_nr_zuo, 0) = (NVL (
      _EK_POS_PREIS.pos_nr_zuo(+), 0))  )

但这部分我不明白。我不是SQL Pro..。(+)在做什么?,0是什么意思?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-08 15:08:39

伙伴r和合作伙伴k

你可以参考这个答案What's the best way to join on the same table twice?

(+)在做什么? 参考OMG Ponies的答案

这是Oracle外部联接的特定符号,因为ANSI-89格式(使用FROM子句中的逗号来分隔表引用)没有标准化外部联接。

查询将以ANSI-92语法重写,如下所示:

代码语言:javascript
复制
SELECT ...
FROM a
LEFT JOIN b ON b.id = a.id

还应该注意的是,即使(+)有效,Oracle建议不要使用它

什么是0意味着什么?

( POS.pos_nr_zuo,0)如果POS.pos_nr_zuo的值为null,则返回0作为默认值

票数 1
EN

Stack Overflow用户

发布于 2017-11-08 15:07:25

你问了几个问题:关于PARTNER r

在查询中,您希望两次引用表PARTNER,因此您给它一个别名,第一个别名是r,第二个别名是k

很难说出它到底用于什么,因为我看不到整个查询。但是一个简单的例子是:假设您有一个ADDRESSES表和一个ORDERS表。ORDERS有两个人的引用:BILLING_ADDR_IDSHIPPING_ADDR_ID。如果要在查询中同时显示两个地址,则需要两个别名。

关于(+) --这是LEFT OUTER JOIN的一种旧语法。关于',0 --它是NVL(...,0)表达式的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47182721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档