MySQL - выберите внутри select и используйте NOT EXISTS - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть эти таблицы:

WORKERS(Id integer PRIMARY KEY, Name text, Phone text, Age integer, Dapartment 
text)

Dapartments(Name text, Manger text)

И я хочу получить имя сотрудника, у которого только один менеджер, я думаю, что в общей сложности 2 менеджера, и у каждого сотрудника может быть 2 менеджера.(хотя бы 1).

Я пытаюсь сделать:

SELECT Name, 
       Manger 
  FROM (SELECT * 
          FROM WORKERS 
               INNER JOIN Dapartments 
                  ON WORKERS.Dapartment = Dapartments.Name 
         WHERE Manger = 'manger1') 
 WHERE NOT EXSITS (SELECT * 
                     FROM WORKERS 
                         INNER JOIN Dapartments 
                            ON WORKERS.Dapartment = Dapartments.Name 
                    WHERE Manger = 'manger2');

И получаю эту ошибку:

Error: near line 52: near "SELECT": syntax error

Что здесь не так?

Спасибо

Ответы [ 2 ]

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

Ниже указан один из способов:

Select w.Name ,d.Manger 
    From Dapartments d
    Join Workers w
    On W.Dapartment = D.Name
Where w.id in (  
Select Id, --count(Dapartment) As Mangrs 
From WORKERS 
group by Id 
Having count(Dapartment)=1
           )

--- Если требуется только имя работника, то:

 Select t.Name As Single_Mgr_Worker 
From (
Select Name, count(Dapartment) As Mangrs 
From WORKERS 
group by Id 
Having count(Dapartment)=1
           ) t
0 голосов
/ 25 февраля 2019

Вам нужно имя псевдонима таблицы для FROM () Table_name _alias (в этом примере T)

    SELECT T.Name, 
           T.Manger 
    FROM (
        SELECT * 
        FROM WORKERS 
        INNER JOIN Dapartments ON WORKERS.Dapartment = Dapartments.Name 
        WHERE Manger = 'manger1'
        )  T 
     WHERE NOT EXSITS (
        SELECT * 
        FROM WORKERS 
        INNER JOIN Dapartments ON WORKERS.Dapartment = Dapartments.Name 
        WHERE Manger = 'manger2'
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...