如何根据匹配的ID和日期比较删除一个表中的行

时间:2013-10-31 21:14:10

标签: sql ms-access ms-access-2010

我有两个表:HIRES1HIRES2(列表之间的名称有一些重复)。

HIRES1 HIRES2 PERSONALID is also in actstdt as long as the action date ( Hires1 ) in actstdt is before the action start date ( Hires2`时,我正试图删除) in中的行。< / p>

注意: HIRES1可能有多个行personalid,其中某些日期在hires2个日期之前,有些日期在hires2个日期之后(如果在hires2日期之后,我想保留它们。

我在下面写的代码要求我输入hires1.actstdthires2.actstdt的参数值:

DELETE * 
FROM HIRES1 
  WHERE PERSONALID in 
  (
    SELECT DISTINCT PERSONALID 
    FROM HIRES2
  ) AND HIRES1.ACTSTDT < HIRES2.actstdt;

2 个答案:

答案 0 :(得分:1)

使用DCount检索与HIRES2中的每一行具有相同PERSONALID和更晚ACTSTDT的{​​{1}}行数。最终,您将HIRES1这些计数所在的DELETE行&gt; 0,但首先使用HIRES1查询计算出逻辑。返回正确的目标行后,可以将其转换为SELECT

如果我理解正确的要求,这应该是一个合理的起点...

DELETE

我假设SELECT * FROM HIRES1 WHERE DCount ( '*', 'HIRES2', 'PERSONALID=' & PERSONALID & ' AND actstdt>' & Format(ACTSTDT, '\#yyyy-m-d\#') ) > 0; 的数字数据类型。如果它实际上是文本,则必须在PERSONALID表达式中的值周围添加引号。

答案 1 :(得分:0)

我查看了Google,发现了另一个类似于此问题的问题Here is the Answer to that Question

它提供了一个更容易的方法来做到这一点

DELETE HIRES1.*
FROM HIRES1
WHERE EXISTS(SELECT PERSONALID 
             FROM HIRES2 
             WHERE HIRES2.PERSONALID = HIRES1.PERSONALID
                    AND HIRES1.ACTSTDT < HIRES2.actstdt)

****这未经过测试****

但它应该有用。

我认为你的查询不起作用,因为你在括号外面有查询的日期范围部分。