我有两个表:HIRES1
和HIRES2
(列表之间的名称有一些重复)。
当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.actstdt
和hires2.actstdt
的参数值:
DELETE *
FROM HIRES1
WHERE PERSONALID in
(
SELECT DISTINCT PERSONALID
FROM HIRES2
) AND HIRES1.ACTSTDT < HIRES2.actstdt;
答案 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)
****这未经过测试****
但它应该有用。
我认为你的查询不起作用,因为你在括号外面有查询的日期范围部分。