Левое внешнее соединение с подзапросами с внутренним соединением - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть SQL-запрос, который я хочу преобразовать с использованием Criteria API.

Я хочу объединить левое внешнее объединение EMPLOYEE с набором результатов из подзапроса, который запрашивает разные таблицы с внутренними объединениями.

SELECT 
    E1.EMPNO, E1.LASTNAME, E1.WORKDEPT, D1.DEPTNAME ,O1.OrgId
FROM 
    E1.EMPLOYEE 
LEFT OUTER JOIN
    (SELECT * 
     FROM Organization O1 
     INNER JOIN Departmental D2 ON D2.OrgId = O1.OrgId
     INNER JOIN Departmental D3 ON D3.OrgId = E2.OrgId) D1 ON D1.DeptNo = E1.WORKDEPT

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Пожалуйста, проверьте следующий запрос SQL

SELECT 
    E1.EMPNO, E1.LASTNAME, E1.WORKDEPT, D1.DEPTNAME, 
    D1.O1OrgId
FROM E1.EMPLOYEE 
LEFT OUTER JOIN ( 
    select
        O1.OrgId as O1OrgId,
        D1.DeptNo as D1DeptNo
    from Organization O1 
    inner join Departmental D1 
        on D1.OrgId=O1.OrgId
) D1 
    on D1.D1DeptNo = E1.WORKDEPT

На псевдоним таблицы, используемый в дополнительном выборе, нельзя ссылаться из внешнего оператора SQL SELECT

Также существует область действия для псевдонима таблицы

Вы можете ссылаться только на поля, которые есть в списке SELECT, из оператора sub-select во внешнем запросе

0 голосов
/ 26 декабря 2018

Вы можете написать запрос, как показано ниже.Здесь вы дали один и тот же псевдоним D1 для одной и той же таблицы Departmental присоединиться несколько раз.

SELECT 
    E1.EMPNO, E1.LASTNAME, E1.WORKDEPT, D1.DEPTNAME ,O1.OrgId
FROM 
    EMPLOYEE E1
LEFT OUTER JOIN
    (SELECT * 
     FROM Organization O1 
     INNER JOIN Departmental D2 ON D2.OrgId = O1.OrgId
     INNER JOIN Departmental D3 ON D3.OrgId = E2.OrgId
     -- add where condition if required
    ) D1 
     ON D1.DeptNo = E1.WORKDEPT
   -- add where condition if required
...