繁体   English   中英

使用Oracle 8i进行子查询

[英]Sub query using Oracle 8i

我们有一个使用以下内容创建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(+));

有一个名为glas_daten_basis的表,其中包含v_auf_pos_vmat.glas1auf_pos.glas2显示的代码的说明。 我们如何显示描述,因为我认为需要子查询,但我无法使其工作。

对于v_auf_pos_vmat.glas1auf_pos.glas2我们需要glas_daten_basis.gl_bez (description)。 可以使用glas_daten_basis.idnrv_auf_pos_vmat.glas1匹配代码。

据我所知,我认为你只需要加入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(+));

我已经将对该表的两个引用别名,以便您可以区分它们。 该表的一个实例是外部连接到v_auf_pos_vmat ,另一个实例连接到auf_pos 我用了旧的(+)符号已经有一段时间了,但我想我已经把它们放在正确的位置,因为你正在做的事情......

顺便说一下,所有条件的括号都是不必要的,因为没有歧义可以解决。

暂无
暂无

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

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