【问题标题】:Is there a way to join tables using concatenated fields for the target?有没有办法使用目标的连接字段来连接表?
【发布时间】:2019-07-05 11:15:53
【问题描述】:

我正在尝试从作业跟踪系统中查询一系列 Sybase Advantage 表,以便构建正在进行的作业及其相关截止日期的报告。

此系统对作业及其子程序集使用“父/子”关系。作业数据(父级)存在于“发布”表中,子装配体数据(子级)存在于“pnlrel”表中。 “发布”表中的作业存在截止日期,但“pnlrel”表中的子组件不存在截止日期。我正在尝试构建一个查询以允许使用父级的到期日期来表示输出中的子级来连接表。数据库是 Sybase Advantage 11。

涉及的表和字段有:

  1. inproces - 当前正在进行的作业,包括父母和孩子。

    • H-JOB# - 作业编号和发布 ID(即 ABC-0100-001;作业 ABC-0100,发布 -001) |H-工作# | |ABC-0100-001 | |ABC-0101-002 | |ABC-0100-001P01 | |ABC-0101-002P01 |
  2. 释放 - 所有父母 -JOB# - 直接匹配 H-JOB#

    • R-DUE-DATE - 作业的截止日期 |职位# | R-到期日 | |ABC-0100-001 | 2000 年 1 月 1 日 | |ABC-0101-002 | 2020 年 1 月 1 日 |
  3. 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


【解决方案1】:

如果我正确理解了父子标识符的形成方式,下面的查询应该可以解决问题:

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')。

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多