DB2 SQL проблема множественного JOIN - PullRequest
0 голосов
/ 24 августа 2018

У меня есть запрос с двумя JOIN, и он не работает.Я не получаю ошибок.Он просто не возвращает никаких записей.Если я отделю свой запрос, то это сработает.Что я здесь не так делаю?

Когда я разделяю запрос, я получаю по одной записи, которую я должен получить.

Полный запрос:

SELECT HPOL07.*, @RFC.*, @AAM.*
FROM BPCSPROF.HPOL07
JOIN BPCSPROF.@RFC ON PRFC = @RFC.RFCNUM  AND PPRF = @RFC.RFCPRC
 AND PGLNO = @RFC.RFCGLN
JOIN BPCSPROF.@AAM ON PPRF = @AAM.AAMPRC  AND PGLNO = @AAM.AAMGLN
WHERE PORD = '605400' AND PID <> 'PZ' 

Отдельнозапросы:

 SELECT HPOL07.*, @RFC.*
    FROM BPCSPROF.HPOL07
    JOIN BPCSPROF.@RFC ON PRFC = @RFC.RFCNUM  AND PPRF = @RFC.RFCPRC
    AND PGLNO = @RFC.RFCGLN
 WHERE PORD = '605400' AND PID <> 'PZ'


SELECT HPOL07.*, @AAM.*
   FROM BPCSPROF.HPOL07
   JOIN BPCSPROF.@AAM ON PPRF = @AAM.AAMPRC  AND PGLNO = @AAM.AAMGLN
WHERE PORD = '605400' AND PID <> 'PZ' 

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Этот вопрос, безусловно, может использовать схему таблицы, но я предполагаю, что PGLNO - это другое значение между двумя вашими объединениями.Если это так, объединения не будут работать, потому что он эффективно ищет @AAM.AAMGLN = @RFC.RFCGLN в вашем текущем запросе.Это связано с тем, что оба объединения используют значение PGLNO и должны быть одинаковыми для обоих предложений объединения.

Если вам нужны два отдельных результата, ответ @Charles должен делать то, что вы хотите.

0 голосов
/ 28 августа 2018

Вы также можете использовать:

SELECT * FROM A h 
   LEFT JOIN B pk ON (pk.PKKONZ='010') AND (pk.PKFIRM IN (10, 20 30)) AND h.TPPALN = pk.PKPALN 
   LEFT JOIN C ar ON (ar.TZKONZ='010') AND (ar.TZFIRM IN (55, 56 ,57)) AND h.TPIDEN = ar.TZIDEN
   WHERE ....
   ORDER BY ...
0 голосов
/ 24 августа 2018

Вы выполняете внутренние объединения, поэтому для каждой записи в HPOL07 должна быть запись в @RFC и @AAM ...

Это то, что вы хотите?

Если в @RFC или @AAM есть соответствующая запись, вам следует использовать LEFT OUTER JOIN

SELECT HPOL07.*, @RFC.*, @AAM.*
FROM BPCSPROF.HPOL07
LEFT OUTER JOIN BPCSPROF.@RFC 
  ON PRFC = @RFC.RFCNUM  AND PPRF = @RFC.RFCPRC
     AND PGLNO = @RFC.RFCGLN
LEFT OUTER JOIN BPCSPROF.@AAM 
  ON PPRF = @AAM.AAMPRC  AND PGLNO = @AAM.AAMGLN
WHERE PORD = '605400' AND PID <> 'PZ' 
...