Я пытаюсь понять самосоединение SQL - особенно то, как порядок предложения ON имеет значение в запросе. Это, вероятно, базовый c вопрос, но, пожалуйста, потерпите меня, поскольку я новичок в языке запросов.
На самом деле это LeetCode Question - # 181 , где я пытаюсь чтобы получить сотрудника, чья зарплата выше, чем у их менеджера. Вы можете проверить схему через ссылку LeetCode или пример SQL Fiddle, который я привел ниже.
Вопрос:
В основном я пытаюсь понять разницу в выводе при выполнении следующих двух запросов:
Я изменил порядок ON предложение С (ON e.ManagerId = m.Id) до (ON m.ManagerId = e.Id) и я получаю обратный ответ от желаемого выхода. Я думал, потому что это самообъединение, порядок не имеет значения, так как я извлекаю информацию из идентичной таблицы.
Пожалуйста, дайте мне знать, что мне не хватает, а также укажите любые направления, если это возможно! Заранее спасибо!
1) Правильный запрос для получения желаемого результата
Select *
FROM Employee e
INNER JOIN Employee m
ON e.ManagerId = m.Id
WHERE e.Salary > m.Salary
SQL Пример скрипты
2) Неверный запрос
Select *
FROM Employee e
INNER JOIN Employee m
ON m.ManagerId = e.Id
WHERE e.Salary > m.Salary
SQL Пример Fiddle