使用Oracle 8i进行子查询

时间:2013-08-06 09:20:47

标签: sql oracle csv

我们有一个使用以下内容创建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所示代码的说明。我们如何显示描述,因为我认为需要子查询,但我无法使其工作。

glas_daten_basis.gl_bezv_auf_pos_vmat.glas1需要auf_pos.glas2(说明)。可以使用glas_daten_basis.idnrv_auf_pos_vmat.glas1匹配代码。

1 个答案:

答案 0 :(得分:2)

据我所知,我认为您只需加入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。已经有一段时间了,因为我使用了旧的(+)符号,但我认为我已经把它们放在了正确的地方,因为你正在做的......

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