【发布时间】:2019-07-05 11:15:53
【问题描述】:
我正在尝试从作业跟踪系统中查询一系列 Sybase Advantage 表,以便构建正在进行的作业及其相关截止日期的报告。
此系统对作业及其子程序集使用“父/子”关系。作业数据(父级)存在于“发布”表中,子装配体数据(子级)存在于“pnlrel”表中。 “发布”表中的作业存在截止日期,但“pnlrel”表中的子组件不存在截止日期。我正在尝试构建一个查询以允许使用父级的到期日期来表示输出中的子级来连接表。数据库是 Sybase Advantage 11。
涉及的表和字段有:
-
inproces - 当前正在进行的作业,包括父母和孩子。
- H-JOB# - 作业编号和发布 ID(即 ABC-0100-001;作业 ABC-0100,发布 -001) |H-工作# | |ABC-0100-001 | |ABC-0101-002 | |ABC-0100-001P01 | |ABC-0101-002P01 |
-
释放 - 所有父母 -JOB# - 直接匹配 H-JOB#
- R-DUE-DATE - 作业的截止日期 |职位# | R-到期日 | |ABC-0100-001 | 2000 年 1 月 1 日 | |ABC-0101-002 | 2020 年 1 月 1 日 |
-
pnlrel - 所有孩子
- P-JOB-NBR - 主要作业编号(即 ABC-0100)
- P-REL-NBR - 作业的发布 ID(即 -001) |P-JOB-NBR |P-REL-NBR|P-REL-ID | |ABC-0100 |001 |P01 | |ABC-0100 |001 |P01 |
为了清楚起见,示例中省略了涉及的其他几个表。
我尝试直接连接两个表,甚至根据一个表中的值的串联来连接它们,该值等于另一个表的单个字段中的值,但仍然没有得到所需的输出。
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)
【问题讨论】:
-
您只获取了
SELECT中的两列(inproces."H-JOB#"和release."R-DUE-DATE")。您不可能在两列上从SELECT获得三列输出。请edit您的帖子提供相关表格中的示例数据。 -
Ken,你是对的,期望的输出是让孩子返回父母的到期日,因为它没有自己的到期日。理想情况下,此输出将在同一列中。谢谢!
标签: sql join sybase concat advantage-database-server