我需要一些关于以下SQL查询的帮助:
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,.
首先是选定的列,到目前为止,我了解到这一点。
FROM AUFT, PARTNER r, PARTNER k, .... skp_ARTIKEL_Z,那么我们有from子句,但是为什么有一个合作伙伴r和合作伙伴k?这是否意味着表名是"Partner r“,还是我还不知道的另一个原因?
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子句对我来说很有意义,所以它基本上匹配所选表中的列.
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是什么意思?
发布于 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语法重写,如下所示:
SELECT ...
FROM a
LEFT JOIN b ON b.id = a.id还应该注意的是,即使(+)有效,Oracle建议不要使用它
什么是0意味着什么?
( POS.pos_nr_zuo,0)如果POS.pos_nr_zuo的值为null,则返回0作为默认值
发布于 2017-11-08 15:07:25
你问了几个问题:关于PARTNER r
在查询中,您希望两次引用表PARTNER,因此您给它一个别名,第一个别名是r,第二个别名是k。
很难说出它到底用于什么,因为我看不到整个查询。但是一个简单的例子是:假设您有一个ADDRESSES表和一个ORDERS表。ORDERS有两个人的引用:BILLING_ADDR_ID和SHIPPING_ADDR_ID。如果要在查询中同时显示两个地址,则需要两个别名。
关于(+) --这是LEFT OUTER JOIN的一种旧语法。关于',0 --它是NVL(...,0)表达式的一部分。
https://stackoverflow.com/questions/47182721
复制相似问题