我正在尝试从作业跟踪系统中查询一系列Sybase Advantage表,以便生成正在进行的作业及其相关的到期日期的报告。
此系统对作业及其子装配使用“父/子”关系。作业数据(父级)存在于“发布”表中,子部件数据(子级)存在于“ pnlrel”表中。 “发布”表中存在作业的截止日期,但“ pnlrel”表中未存在子装配的截止日期。我正在尝试建立查询以某种方式联接表,以允许使用父项的到期日来代表输出中的子项。该数据库是Sybase Advantage 11。
涉及的表和字段是:
进行-正在进行的工作,包括父母和孩子。
发布-所有父母 -JOB#-直接匹配到H-JOB#
pnlrel-所有孩子
为清楚起见,示例中未涉及其他几个表。
我试图直接连接两个表,甚至基于一个表中的值串联等于另一个表的单个字段中的值来联接它们,但仍然没有得到所需的输出。
SELECT inproces."H-JOB#", release."R-DUE-DATE"
FROM inproces
left join release on inproces."H-JOB#" = release."R-TRACKING-NBR"
left join pnlrel on inproces."H-JOB#" = pnlrel."P-TRACKING-NBR"
这将返回父母的工作编号和到期日期,而不是孩子的工作日期。
|ABC-0100-001 | 01/01/2000 | (parent)
|ABC-0100-001P01| NULL |(child)
|ABC-0101-002 | 01/01/2020 | (parent)
|ABC-0101-002P01| NULL |(child)
理想的结果是让孩子显示父母的到期日,因为它没有自己的日期:
|ABC-0100-001 | 01/01/1901 | (parent)
|ABC-0100-001P01 | 01/01/1901 | (child displays parent's due date)
|ABC-0101-002 | 01/01/2020 | (parent)
|ABC-0101-002P01 | 01/01/2020 | (child displays parent's due date)
答案 0 :(得分:0)
如果我正确理解了父代和子代标识符的形成方式,那么以下查询应该可以解决问题:
SELECT inproces."H-JOB#", release."R-DUE-DATE"
FROM inproces
LEFT JOIN release
ON inproces."H-JOB#" LIKE CONCAT(release."R-TRACKING-NBR", '%')
这应该足够宽松,以允许子进程(例如,"H-JOB#"
的值看起来像'ABC-0100-001P01'
)找到其父发行版("R-TRACKING-NBR"
:'ABC-0100'
)。