SQL-запрос сравнения
Я занимаюсь практическими запросами, чтобы улучшить свои навыки SQL (я новичок), и я столкнулся с этой проблемой, что мне нужна помощь в использовании базы данных Northwind. Запрошенный запрос должен:
Дайте имя сотрудников и города, где они живут для сотрудников, которые продали клиентам в одном городе.
То, что я написал для этого, было:
- Не удается привязать базу данных Northwind к SQL Server 2008 R2
- Примеры баз данных для SQL Server 2008
- Northwind SQL - общие заказы на одного клиента
- Группирование строк в sql-запросе с различными таблицами
- Выберите имена компаний с более чем X заказами
USE Northwind; SELECT DISTINCT FirstName, LastName, e.City FROM Employees e INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID INNER JOIN Customers c ON o.CustomerID = c.CustomerID INNER JOIN Customers ON c.City = e.City WHERE e.City = ANY(SELECT Customers.City FROM Customers);
Я вернулся 6 сотрудниками, но я не уверен, что они верны, и я считаю, что мое заявление WHERE неверно.
В основном, мой вопрос заключается в том, что я использую правильные заявления о соединении и как мне влиять на результаты фильтрации с помощью инструкции WHERE? Я не совсем уверен, как сравнивать одну конкретную запись с другими записями. Исходя из фона Java, я использую for-loops, которые могут проверять каждый отдельный «объект» (запись) с определенным полем из другого «объекта». В этом случае мне интересно, как я могу проверить атрибут City каждой записи из таблицы Employees с атрибутом City записей в таблице Customers. Любые советы приветствуются, спасибо!
Я думаю, вам нужно только один раз присоединиться к таблице клиентов и иметь оба требования (находящиеся в том же порядке и в том же городе, что и сотрудник) в качестве ваших реквизитов присоединения, например
SELECT DISTINCT FirstName, LastName, e.City FROM Employees e INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID INNER JOIN Customers c ON o.CustomerID = c.CustomerID AND c.City = e.City
В качестве альтернативы вы можете просто присоединиться к клиенту по идентификатору заказа и отфильтровать требование города в предложении where. Разумеется, не должно быть никакой разницы, если вы собираетесь оглянуться на сценарий в какой-то момент, это может помочь вам вспомнить
SELECT DISTINCT FirstName, LastName, e.City FROM Employees e INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID INNER JOIN Customers c ON o.CustomerID = c.CustomerID WHERE e.City = C.City
Я думаю, что важная часть, чтобы развязать голову, состоит в том, что после того, как вы присоединились к таблице, это фактически одна таблица с столбцами из обоих (или более с несколькими объединениями). Внутренние условия соединения будут отфильтровывать строки, которые не совпадают между двумя таблицами, а затем вы можете сравнить столбцы