Я новичок пытается учиться и на практике SQL с таблицами на основе этой схемы:SQL-решение с подзапросами?
EMPLOYEE
-ID, Name
ASSIGNMENT
-ID
,Country
,Start
,End
Первичные ключи: Employee.ID
и все четыре столбца, показанные для r ASSIGNMENT
; и ASSIGNMENT.ID
является ссылкой на EMPLOYEE.ID
. Область начала и конца находится в годах.
Проблема: Я пытаюсь написать запрос, в котором будут отображаться все сотрудники (по имени), где они были назначены на задание в США, сразу после того, как они выполнили задание в Канаде.
Это моя текущая попытка, которую невозможно вычислить. Я считаю, что я направляюсь в правильном направлении, но есть синтаксические ошибки.
SELECT
E.Name
FROM
EMPLOYEE E
INNER JOIN
ASSIGNMENT A ON E.ID = A.ID
WHERE
(SELECT End FROM ASSIGNMENT
WHERE Country = 'Canada') = (SELECT Start FROM ASSIGNMENT
WHERE COUNTRY = 'USA')
GROUP BY
E.Name;
Любая критика в пользу моего понимания моих заблуждений приветствуется. Мои ошибки исходят из комбинации подзапросов в разделе WHERE
В этом подзапросе может быть возвращено не более одной записи.
Возможно, кто-то может показать мне другой способ вычислить это?
Этот запрос проходит проверку в MS Access, так как мне было легко быстро создать базу данных и отношения.
Выглядит хорошо! Похоже на более логичный подход. К сожалению, я получаю ошибки в этой версии с помощью Access. Когда скобки скорректированы для нескольких объединений, появляется сообщение об ошибке «AND B.Start = A.End», говоря, что выражение JOIN не поддерживается. – Algorithm
Я немного ржавый writ MSAccess quirks ... слишком занят с _real_ rdbms ;-). См. Обновление для ответа для альтернативного решения. Вы можете также использовать «смешанный режим», т.е. только переместите условие оскорбления в предложение where. – collapsar
Согласен. MSAccess уже показывает свои ограничения в моем кратком опыте. Я переместил ваш исходный код с той же базой данных в MS Studio с SQL Server, и он работал безупречно. Благодаря! – Algorithm