我有一个Oracle表,它看起来像下面的
地区 | 地点 | $金额 | >日期名称|
---|---|---|---|
1 | 位置1 | 500 | 2021-01-01用户 |
1 | 位置1 | -5002021-01-02 | 用户A |
2 | 位置2 | 7002021-01-03 | 用户B | [/tr>
您可以使用:
DELETE FROM table_name t
WHERE EXISTS (
SELECT 1
FROM table_name x
WHERE x.region = t.region
AND x.location = t.location
AND x.amount = -t.amount
AND x."DATE" IN (t."DATE" - 1, t."DATE" + 1)
AND x.name = t.name
)
注意:DATE
是一个关键字,除非使用带引号的标识符,否则不能将其用作列名
db<gt;小提琴这里
这就是您所描述的:
select t.*
from t
where not exists (select 1
from t t2
where t2.region = t.region and
t2.location = t.location and
t2.name = t.name and
t2.amount = - t.amount and
t2.date in (t.date - 1, t.date + 1)
);
然而,你可能需要考虑一下你是如何表达这个问题的。如果你有100/-100/100,会发生什么?您描述的逻辑(以及上面的查询(将删除所有三行。这可能就是你的意图。如果不是,你应该问一个新的问题。
注意:以上操作将从结果集中删除行。对于delete
,很容易对此进行修改。