2012-05-09 1 views
3

У меня есть следующий доступ MS (2010) базы данных:Multiple (? Налево, пересечь) включается в MS Access

database diagram

Сотрудника, Период и эксплуатация таблица заполняется, и UnitOfWork стол пустым ,

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

Я хочу сделать SELECT, чтобы увидеть следующее: UnitOfWorks, для каждой доступной комбинации Employee, Period и Operation.

Другими словами, я хочу, чтобы выбрать все возможные комбинации Работника, период и эксплуатации и LEFT JOIN UnitOfWork к результату, поэтому я могу ввести OperationsDone для каждого UnitOfWork. Я добавлю ИНЕКЕ и порядка, а позже

Я думал, что CROSS JOIN поможет (В MS Access это просто перечислению запятыми), что-то вроде этого:

SELECT * FROM (Employee, Period, Operation) 
LEFT JOIN UnitOfWork on UnitOfWork.OperationId=Operation.OperationId 

Но когда я выполнить этот запрос, Я получаю сообщение об ошибке «Синтаксическая ошибка при операции JOIN».

Я также попытался так:

SELECT * FROM Employee AS e LEFT JOIN 
(Period AS p LEFT JOIN UnitOfWork AS uow ON p.PeriodId=uow.PeriodId) 
on e.EmployeeId=uow.EmployeeId 

Это только 2 присоединяется из 3-х, мне нужно, но уже с этим я получаю «JOIN Expression не поддерживается» ошибка.

Любые предложения по дизайну базы данных также приветствуются - это новая база данных, которую я разрабатываю, и я новичок в SQL.

Заранее благодарен!

Обновление: Я также думаю, может быть, я должен попробовать подзапрос? Подобно выполнению соединения CROSS (операции, сотрудника и периода) в одном запросе, а затем LEFT, присоединяющегося к UnitOfWork к результату запроса ... но как мне сделать JOIN «по нескольким полям»? И как реализовать подзапрос в доступе?

+0

Вы должны попробовать использовать явный 'CROSS JOIN', а не запятые. –

+0

Нет, явный CROSS JOIN не будет работать в MS Access. I.e .: SELECT * FROM EmployeeId CROSS JOIN Период Для этого я получаю «Ошибка Sytax в предложении FROM». ошибка – Ubeogesh

+0

в целом вы столкнетесь с множеством этих «не поддерживаемых» ошибок в MS Access. Я предлагаю использовать SQLite – nawfal

ответ

1

Попробуйте так:

SELECT * FROM (Employee AS e LEFT JOIN UnitOfWork AS uow ON e.EmployeeId=uow.EmployeeId) 
       LEFT JOIN Period AS p on p.PeriodId=uow.PeriodId 
+0

Таблица сотрудников не имеет PeriodId. И период не имеет EmployeeId. Таблицы Employee и Period могут быть связаны только через таблицу UnitOfWork – Ubeogesh

+0

@Ubeogesh У меня были неправильные ограничения, я обновил свой ответ, он работает? –

+0

Ну, это выполняется, но у меня только один модуль UnitOfWork присоединился к каждому сотруднику один раз. То есть если у меня есть 5 сотрудников и 5 периодов, у меня будет только 5 возвращенных записей (вместо 25).Проблема в том, что период остается присоединенным к таблице UnitOfWork, которая ** пуста ** – Ubeogesh

Смежные вопросы