【发布时间】:2011-08-14 03:22:03
【问题描述】:
如果我在 Access 中将 UNION 用于子表单记录集,则不允许使该记录集可更新。
问题是,我需要能够更新记录集。
我有两张表——一张是员工列表(Employees)。另一个是记录每个员工当天关闭的票数。因此,该表 (INCTech) 使用 EmployeeID 和 Date 作为联合主键,因为每个员工在给定日期只能有一条记录。
我无法使用 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)
因为如果员工的记录与 2011 年 4 月 15 日不同,则他们不满足两个日期条件中的任何一个 - 日期不再为 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 才能工作,因此生成的记录集是只读的。这是行不通的 - 我需要能够为每个员工的日常记录修改或添加数据。
救命!
【问题讨论】:
标签: sql ms-access union outer-join