Есть ли способ объединить таблицы, используя сцепленные поля для цели? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь запросить серию таблиц Sybase Advantage из системы отслеживания заданий, чтобы создать отчет о текущих заданиях и связанных с ними сроках исполнения.

Эта система использует отношения «родитель / потомок» для заданий и их узлов.Данные о задании (родительские элементы) существуют в таблице «release», данные о сборочных узлах (дочерние элементы) существуют в таблице «pnlrel».Сроки выполнения указаны для заданий в таблице «release», но отсутствуют для узлов в таблице «pnlrel».Я пытаюсь создать запрос для объединения таблиц таким образом, чтобы разрешить использование дат родителя для представления дочерних элементов в выходных данных.База данных - Sybase Advantage 11.

Используются следующие таблицы и поля:

  1. inproces - выполняемые задания, включая родителей и детей.

    • H-JOB # - номер задания и идентификатор выпуска (т. Е. ABC-0100-001; задание ABC-0100, выпуск -001) | H-JOB # || ABC-0100-001 || ABC-0101-002 || ABC-0100-001P01 || ABC-0101-002P01 |
  2. выпуск - все родители -JOB # - прямое совпадение с H-JOB #

    • R-DUE-DATE - срок выполнения работы | JOB # |R-DUE-DATE || ABC-0100-001 |01.01.2000 || ABC-0101-002 |01/01/2020 |
  3. pnlrel - все дети

    • P-JOB-NBR - основной номер задания (например, ABC-0100)
    • P-REL-NBR - идентификатор выпуска задания (т. Е. -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)

1 Ответ

0 голосов
/ 12 февраля 2019

Если я правильно понял, как формируются идентификаторы родителя и потомка, следующий запрос должен помочь:

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

...