Если я использую UNION для набора записей подчиненной формы в Access, это не позволяет сделать этот набор записей обновляемым.
Проблема в том, что мне нужно обновить набор записей.
У меня есть две таблицы - одна - это список сотрудников (сотрудников). Другой — это запись о том, сколько тикетов закрыл каждый сотрудник за день. В результате эта таблица (INCTech) использует идентификатор сотрудника и дату в качестве общего первичного ключа, поскольку у каждого сотрудника может быть только одна запись для данной даты.
Я не могу использовать LEFT OUTER JOIN для получения полного списка сотрудников, потому что он исключит любого сотрудника, у которого есть запись в INCTech для даты, отличной от указанной. Это не работает:
SELECT INCTech.EmployeeID, INCTech.Assigned, INCTech.Closed, INCTech.Submitted,
INCTech.StillOpen, INCTech.TheDate, Employees.FirstName, Employees.LastName
FROM Employees LEFT JOIN INCTech ON Employees.EmployeeID = INCTech.EmployeeID
WHERE Employees.GroupID = 8 AND (INCTech.TheDate = #4/15/2011# OR
INCTech.TheDate IS NULL)
Потому что, если у сотрудника есть запись на дату, отличную от 15.04.2011, он не соответствует ни одному из двух критериев даты: дата больше не NULL, но это также не заданная дата.
Мой запрос, который работает:
SELECT Employees.EmployeeID, Employees.FirstName, Employees.LastName,
Employees.FirstName & " " & Employees.LastName AS FullName, INCTech.TheDate,
INCTech.Assigned, INCTech.Closed, INCTech.Submitted, INCTech.StillOpen,
Employees.GroupID
FROM Employees
LEFT OUTER JOIN INCTech ON
Employees.EmployeeID=INCTech.EmployeeID
WHERE (INCTech.TheDate)=Calendar.Value AND Employees.GroupID = ddlGroup.Value
UNION
SELECT Employees.EmployeeID, Employees.FirstName, Employees.LastName,
Employees.FirstName & " " & Employees.LastName AS FullName, NULL AS TheDate,
NULL AS Assigned, NULL AS Closed, NULL As Submitted, NULL As StillOpen,
Employees.GroupID
FROM Employees
LEFT OUTER JOIN INCTech ON Employees.EmployeeID=INCTech.EmployeeID
WHERE Employees.EmployeeID NOT IN
(SELECT INCTech.EmployeeID FROM INCTech WHERE INCTech.TheDate=Calendar.Value)
AND Employees.GroupID = ddlGroup.Value
Но поскольку для этого мне нужно использовать UNION, результирующий набор записей доступен только для чтения. Это не сработает — мне нужно иметь возможность изменять или добавлять данные для ежедневной записи каждого сотрудника.
Помощь!