Запросы SQL Join с несколькими таблицами - PullRequest
0 голосов
/ 21 июня 2011

У меня есть база данных со следующим макетом:

employees (person_name, street, city) 
works (person_name, company_name, salary) 
companies (company_name, city) 
manages (person_name, manager_name)

Мне нужно задать вопрос, который позволит мне найти всех сотрудников, которые зарабатывают больше, чем их менеджеры. Я знаю, что это связано с довольно интенсивным СОЕДИНЕНИЕМ между сотрудниками, работой и управлением таблицами, и я не могу получить тот, который будет работать. Кто-нибудь может мне помочь и объяснить, как получается решение?

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Во-первых, имя не является хорошим ключом.

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

Без написания запроса для вас это означает, что вы должны выбрать сотрудников, присоединиться через Works и Companies (это даст вам зарплату сотрудника).К этому следует присоединиться через Управление, которое присоединяется к Сотрудникам, чтобы получить данные вашего менеджера.Эта версия сотрудников может быть присоединена к Works во второй раз, чтобы получить зарплату вашего менеджера.Затем просто сравните зарплату в предложении WHERE.

1 голос
/ 21 июня 2011
SELECT w.person_name
FROM works w 
    INNER JOIN manages m
        ON m.person_name = w.person_name
            INNER JOIN works wManager
                ON wManager.person_name = m.manager_name
WHERE w.salary > wManager.salary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...