2

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

我试图在HIRES2 acttdt Hires1 acttdt Hires2`HIRES1时删除行。PERSONALID is also inas long as the action date () inis before the action start date () in

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

我在下面编写的代码要求我输入hires1.actstdtand的参数值hires2.actstdt

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

2 回答 2

1

使用DCount检索HIRES2与. PERSONALID_ ACTSTDT_ HIRES1最终,您将获得DELETE那些HIRES1计数 > 0 的行,但首先要通过SELECT查询来计算逻辑。一旦返回正确的目标行,就可以将其转换为DELETE.

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

SELECT *
FROM HIRES1
WHERE
    DCount
        (
            '*',
            'HIRES2',
            'PERSONALID=' & PERSONALID
                & ' AND actstdt>' & Format(ACTSTDT, '\#yyyy-m-d\#')
        ) > 0;

我假设数字数据类型为PERSONALID. DCount如果它实际上是文本,则必须在该表达式中的值周围添加引号。

于 2013-10-31T21:39:58.723 回答
0

我在谷歌上发现了另一个类似的问题,这是该问题的答案

它提供了一种更简单的方法来做到这一点

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

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

但它应该工作。

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

于 2013-10-31T21:54:33.097 回答