Путаница с вложенными запросами

#mysql #sql

#mysql #sql

Вопрос:

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

Вот вопрос, над которым я работаю:

  1. Используя только вложенный запрос, отобразите OrderID, OrderDate и ShippedDate для всех заказов, отправленных сотрудниками, проживающими в США. Сортировка выходных данных по дате заказа

Вот мой вложенный запрос:

 SELECT OrderID, OrderDate, ShippedDate

FROM Orders

WHERE Country =

(SELECT Country

FROM Employees

WHERE Country = 'USA');
  

Комментарии:

1. попробуйте изменить country= на country в

2. также вы можете попробовать другой подзапрос, поскольку существует необязательное СКАНИРОВАНИЕ ТАБЛИЦЫ для подзапроса yoru

3. Существует ли страна в таблице заказов? Если это не так, какой ключ соединяет таблицу Orders с таблицей Employees?

4. EmployeeID есть в обеих таблицах, поэтому попробовал EmployeeID вместо Country, но он вернул результаты null, что, я уверен, неверно.

5. Может быть, я в замешательстве, но разве мне не нужно использовать таблицу заказов и таблицу сотрудников для этого вопроса?

Ответ №1:

Попробуйте

 SELECT OrderID, OrderDate, ShippedDate

FROM Orders

WHERE EmployeeID IN

(SELECT EmployeeID

FROM Employees

WHERE Country = 'USA');
  

В этом случае вы используете как EmployeeID, так и IN .

Подзапрос ищет список EmployeeID в США. Затем он использует этот список для выбора заказов, сделанных подмножеством сотрудников в США, из таблицы заказов.

Комментарии:

1. Спасибо за это. Теперь я понимаю, что вы имеете в виду.

Ответ №2:

Вы присоединяетесь к Country, когда вы должны присоединиться к EmployeeID или любому другому полю, например, ГДЕ EmployeeID (ВЫБЕРИТЕ EmployeeID …

То, как вы это делаете, соответствует США для США, что даст неверные результаты, поскольку любые две записи с США в качестве страны будут объединены.

Комментарии:

1. Спасибо за ответ.