«Та же таблица» LEFT JOINE ON «то же поле комментария» в MS-Access 2016 - PullRequest
1 голос
/ 20 июня 2020

У меня что-то вроде этого

Сотрудник (Emp_ID, Emp_Name) SecurityGuards (MainEmp_ID, AlternativeEmp_ID). // Охранники считаются сотрудниками

Мой sql запрос следующим образом:

  Select Employe.Emp_Name 
  From ( Employe
  LEFT JOIN ON SecurityGuards ON SecurityGuards.MainEmp_ID = Employe.Emp_ID)
  LEFT JOIN ON SecurityGuards ON SecurityGuards.AlternativeEmp_ID = Employe.Emp_ID

Теперь я хочу, чтобы в запросе отображались как основные, так и альтернативные охранники по именам, а не по идентификаторам, но он просто дает Мне сообщается, что "выражение соединения не поддерживается", хотя удаление второго ЛЕВОГО соединения работает нормально. Я использую MS-Access 2016

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Вы должны присоединиться к SecurityGuards к 2 копиям Employee, чтобы получить 2 имени:

SELECT e1.Emp_Name AS MainName, e2.Emp_Name AS AlternativeName
FROM (SecurityGuards AS s 
LEFT JOIN Employee AS e1 ON e1.Emp_ID = s.MainEmp_ID)
LEFT JOIN Employee AS e2 ON e2.Emp_ID = s.AlternativeEmp_ID
0 голосов
/ 20 июня 2020

Если вы хотите, чтобы результаты были в одной строке, вы можете использовать псевдонимы таблиц и два LEFT JOIN s:

select  . . .
from (Employe as E left join
      SecurityGuards as sgm
      ON sgm.MainEmp_ID = e.Emp_ID
     ) left join
     SecurityGuards as sga
     ON sga.AlternativeEmp_ID = e.Emp_ID;

Если вам просто нужны сотрудники, которые находятся в любом столбце, используйте EXISTS:

select e.*
from employe as e
where exists (select 1
              from SecurityGuards as sg
              where e.Emp_ID in (sg.MainEmp_ID, sg.AlternativeEmp_ID
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...