Sybase изменяет внешние соединения (* = или = *) на соединения ANSI - PullRequest
0 голосов
/ 18 июня 2019

После миграции из базы данных MySQL в базу данных Sybase мне нужно переписать некоторые коды.К сожалению, я не могу найти правильный способ сделать это, я привожу короткий пример одного из кодов, он был автоматически написан дизайнером Business Object Universe.Главным образом я хотел бы понять, как правильно изменить эти правые = * или левые * = соединения, чтобы я мог самостоятельно изменять другие коды.Причина в том, что Sybase не позволяет использовать как ANSI, так и Transact-SQL в одном выделении.

Попытка изменить его только на внешние объединения, но результаты неверны - слишком много данных.

SELECT DISTINCT
  Y15YVF_FLEET_P.FLEET_NUM,
  AVG(Y15YVF_INVOICE.REVAL),
  Y15YVF_FLEET_P.LCTYP,
  Y15YVF_FLEET_P.DIVISION
FROM
  Y15YVF_CONTRACT INNER JOIN Y15YVF_FLEET_A ON (Y15YVF_FLEET_A.MANDT=*Y15YVF_CONTRACT.MANDT and Y15YVF_FLEET_A.FLEET_NUM=*Y15YVF_CONTRACT.FLEET_NUM and Y15YVF_FLEET_A.CTNR=*Y15YVF_CONTRACT.CTNR)
   INNER JOIN Y15YVF_VEHICLES ON (Y15YVF_VEHICLES.FLEET_NUM=Y15YVF_FLEET_A.FLEET_NUM and Y15YVF_VEHICLES.MANDT=Y15YVF_FLEET_A.MANDT)
   INNER JOIN Y15YVF_FLEET_P ON (Y15YVF_VEHICLES.FLEET_NUM=Y15YVF_FLEET_P.FLEET_NUM and Y15YVF_VEHICLES.MANDT=Y15YVF_FLEET_P.MANDT)
   INNER JOIN Y15YVF_INVOICE ON (Y15YVF_FLEET_A.MANDT=*Y15YVF_INVOICE.MANDT and Y15YVF_FLEET_A.FLEET_NUM=*Y15YVF_INVOICE.FLEET_NUM)

WHERE
  ( 
  Y15YVF_INVOICE.REDAT  >=  '20040601'
  AND  Y15YVF_VEHICLES.MANDT  !=  @variable('Stichtag:')
  AND  Y15YVF_FLEET_A.OWNSH  =  'L'
  AND  Y15YVF_CONTRACT.LEABEG  !=  '00000000'
  )
GROUP BY
  Y15YVF_FLEET_P.FLEET_NUM, 
  Y15YVF_FLEET_P.LCTYP, 
  Y15YVF_FLEET_P.DIVISION

Я также добавляю ссылку на пример данных, так как существует слишком много данных, не уверен, будет ли их достаточно для проверки: Данные

1 Ответ

0 голосов
/ 18 июня 2019

Из того, что я могу сказать, вы хотите:

FROM e JOIN
     d
     ON e.FLEET_NUM = d.FLEET_NUM AND
        e.MANDT = d.MANDT LEFT JOIN
     a
     ON e.FLEET_NUM = a.FLEET_NUM AND
        e.MANDT = a.MANDT
     b
     ON d.MANDT = b.MANDT AND d.FLEET_NUM = b.FLEET_NUM
     c 
     ON d.MANDT = c.MANDT AND d.FLEET_NUM = c.FLEET_NUM AND
        d.CTNR = c.CTNR

Было бы легче сказать по именам таблиц и образцам данных.

...