简体   繁体   English

使用Oracle 8i进行子查询

[英]Sub query using Oracle 8i

We have a SQL script that creates a CSV using the following: 我们有一个使用以下内容创建CSV的SQL脚本:

SELECT DISTINCT auf_kopf.auf_nr, TO_CHAR(auf_kopf.erfass_dat,'DD/MM/YYYY'), TO_CHAR(auf_kopf.liefer_dat,'DD/MM/YYYY'), v_ord_custname.cust_name, auf_pos.auf_pos, v_auf_stat_0.anz, v_reason_code_1.reason_code, v_reason_code_1.reason_desc, v_auf_pos_vmat.glas1, auf_pos.glas2, auf_kopf.auf_off, auf_pos.ver_art
FROM auf_kopf, auf_pos, v_auf_pos_vmat, v_auf_stat_0, v_ord_custname, v_reason_code_1, glas_daten_basis
WHERE auf_kopf.erfass_dat >sysdate-7
AND auf_kopf.kopf_reason IS NOT NULL
AND (auf_kopf.auf_nr=auf_pos.auf_nr(+))
AND (auf_pos.auf_nr=v_auf_pos_vmat.auf_nr(+))
AND (auf_pos.auf_pos=v_auf_pos_vmat.auf_pos(+))
AND (auf_pos.variante=v_auf_pos_vmat.variante(+))
AND (auf_pos.auf_nr=v_auf_stat_0.auf_nr)
AND (auf_pos.auf_pos=v_auf_stat_0.auf_pos)
AND (auf_pos.variante=v_auf_stat_0.variante)
AND (auf_kopf.auf_nr=v_ord_custname.order_no)
AND (auf_kopf.auf_nr=v_reason_code_1.order_no(+));

There is a table called glas_daten_basis that contains descriptions for the codes shown from v_auf_pos_vmat.glas1 and auf_pos.glas2 . 有一个名为glas_daten_basis的表,其中包含v_auf_pos_vmat.glas1auf_pos.glas2显示的代码的说明。 How do we show the description also as I think a sub query is required but I couldn't get it to work. 我们如何显示描述,因为我认为需要子查询,但我无法使其工作。

We need glas_daten_basis.gl_bez (description) for v_auf_pos_vmat.glas1 and auf_pos.glas2 . 对于v_auf_pos_vmat.glas1auf_pos.glas2我们需要glas_daten_basis.gl_bez (description)。 The codes can be matched using glas_daten_basis.idnr and v_auf_pos_vmat.glas1 . 可以使用glas_daten_basis.idnrv_auf_pos_vmat.glas1匹配代码。

As far as I can follow this, I think you just need to join to glas_daten_basis twice: 据我所知,我认为你只需要加入glas_daten_basis两次:

SELECT DISTINCT auf_kopf.auf_nr, TO_CHAR(auf_kopf.erfass_dat,'DD/MM/YYYY'), 
  TO_CHAR(auf_kopf.liefer_dat,'DD/MM/YYYY'), v_ord_custname.cust_name, 
  auf_pos.auf_pos, v_auf_stat_0.anz, v_reason_code_1.reason_code,
  v_reason_code_1.reason_desc,
  v_auf_pos_vmat.glas1 ||' '|| gd_basis1.gl_bez as glas1,
  auf_pos.glas2 ||' '|| gd_basis2.gl_bez as glas2,
  auf_kopf.auf_off, auf_pos.ver_art
FROM auf_kopf, auf_pos, v_auf_pos_vmat, v_auf_stat_0, v_ord_custname,
  v_reason_code_1, glas_daten_basis gd_basis1, glas_daten_basis gd_basis2
WHERE auf_kopf.erfass_dat >sysdate-7
AND auf_kopf.kopf_reason IS NOT NULL
AND (auf_kopf.auf_nr=auf_pos.auf_nr(+))
AND (auf_pos.auf_nr=v_auf_pos_vmat.auf_nr(+))
AND (auf_pos.auf_pos=v_auf_pos_vmat.auf_pos(+))
AND (auf_pos.variante=v_auf_pos_vmat.variante(+))
AND (auf_pos.auf_nr=v_auf_stat_0.auf_nr)
AND (auf_pos.auf_pos=v_auf_stat_0.auf_pos)
AND (auf_pos.variante=v_auf_stat_0.variante)
AND (auf_kopf.auf_nr=v_ord_custname.order_no)
AND (auf_kopf.auf_nr=v_reason_code_1.order_no(+))
AND (v_auf_pos_vmat.glas1 = gd_basis1.idnr(+))
AND (auf_pos.glas2 = gd_basis2.idnr(+));

I've aliased the two references to that table so you can distinguish between them. 我已经将对该表的两个引用别名,以便您可以区分它们。 One instance of the table is outer joined to v_auf_pos_vmat , the other to auf_pos . 该表的一个实例是外部连接到v_auf_pos_vmat ,另一个实例连接到auf_pos It's been a while since I've used the old (+) notation, but I think I've got them in the right place for what you're doing... 我用了旧的(+)符号已经有一段时间了,但我想我已经把它们放在正确的位置,因为你正在做的事情......

Incidentally, the brackets around all the conditions are unnecessary though, since there is no ambiguity to resolve. 顺便说一下,所有条件的括号都是不必要的,因为没有歧义可以解决。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM