[英]Updating a table with mutliple criteria from another table
我继承了一个数据库,其中包含两个相关的表,一个用于客户,一个用于事务。 客户可能有多个事务,这两个表通过“客户ID”字段链接。
作为取消标识过程的一部分,在关闭文件七年后,我们需要在“客户”表中删除客户的名字,姓氏和出生日期,但是我们希望保留该记录,因此我们能够跟踪我们过去所做的工作。
我想创建一个更新查询,当客户端满足以下条件时,它将用取消标识的数据替换标识数据:
但是,我无法弄清楚如何使它工作。 设置一个更新查询可以更新Clients表中的信息(如果它具有的相关事项早于七年)似乎是可行的,但是我无法弄清楚如何以不会更新的方式进行操作如果客户仍有未解决的问题或未满7年的问题,则提供此信息。 有人能指出我正确的方向吗?
为了进一步扩展,到目前为止,我的查询涉及两个表Clients
和Matters
。 文件关闭日期在Matters
,客户的标识详细信息在“ Clients
。 据我了解,与其说是标准问题,不如说是联接问题。
Client | MatterID | MatterClosureDate
-------|----------|------------------
Alice | 1 | 2008
Bruce | 2 | 2009
Carrol | 3 | 2009
Bruce | 250 | 2012
为了说明这一点,两个表有四个相关结果。 爱丽丝(Alice)和卡罗尔(Carrol)都是没有事务的客户,这些事务仍未解决或最近未解决,但是布鲁斯(Bruce)有一件事应取消他的资格。 目前,虽然我的查询还不够复杂,无法实现,但返回了:
Client | MatterID | MatterClosureDate
-------|----------|------------------
Alice | 1 | 2008
Bruce | 2 | 2009
Carrol | 3 | 2009
您可以在文件关闭日期字段的条件中输入< #9/14/2009# And Is Not Null
考虑为每个列出的条件使用与每个ClientID逐行匹配的相关子查询:
SELECT c.FirstName, m.MatterID, m.MatterClosureDate
FROM Clients c
INNER JOIN Matters m ON c.ID = m.ClientID
WHERE
(SELECT Count(*) FROM Matters sub
WHERE sub.ClientID = c.ID
AND sub.MatterClosureDate IS NULL) = 0
AND
(SELECT Count(*) FROM Matters sub
WHERE sub.ClientID = c.ID
AND sub.MatterClosureDate > Year(Date()) - 7) = 0
AND
(SELECT Count(*) FROM Matters sub
WHERE sub.ClientID = c.ID
AND sub.MatterClosureDate <= Year(Date()) - 7) > 0;
-- FirstName MatterID MatterClosureDate
-- Alice 1 2008
-- Carrol 3 2009
对于更新查询,将上面的SELECT
转换为UPDATE
语句:
UPDATE Clients c
SET c.FirstName = 'XXXXX',
c.LastName = 'XXXXX',
c.DOB = NULL
WHERE
(SELECT Count(*) FROM Matters sub
WHERE sub.ClientID = c.ID
AND sub.MatterClosureDate IS NULL) = 0
AND
(SELECT Count(*) FROM Matters sub
WHERE sub.ClientID = c.ID
AND sub.MatterClosureDate > Year(Date()) - 7) = 0
AND
(SELECT Count(*) FROM Matters sub
WHERE sub.ClientID = c.ID
AND sub.MatterClosureDate <= Year(Date()) - 7) > 0;
另外,您可以使用Access的域聚合DCount()
:
UPDATE Clients c
SET c.FirstName = 'XXXXX',
c.LastName = 'XXXXX',
c.DOB = NULL
WHERE
DCount("*", "Matters", "ClientID = " & c.ID & "
AND MatterClosureDate IS NULL") = 0
AND
DCount("*", "Matters", "ClientID = " & c.ID & "
AND MatterClosureDate > Year(Date()) - 7") = 0
AND
DCount("*", "Matters", "ClientID = " & c.ID & "
AND MatterClosureDate <= Year(Date()) - 7") > 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.