如何在每组 ID 和 END_DTTM_FLG 上查找 TABLE
how to LOOKUP on a TABLE per SET of ID and END_DTTM_FLG
希望你能帮帮我!
要求是 clean-up/delete 来自 TABLE_2 的 INACTIVE 记录。
INACTIVE 记录条件 是当 ID
记录有 END_DTTM IS NOT NULL
并且没有 ID
与 [=16= 相同的合作伙伴记录].
意味着如果 ID
有 NULL END_DTTM
,那么 ID
仍然有效。
我先进行了查询以获取 INACTIVE 记录,然后在获取正确数据时添加 DELETE 语法。
示例查询:
WITH SRC1 AS (
SELECT ID
FROM TABLE_1
WHERE END_DTTM IS NOT NULL
)
SELECT ID
FROM TABLE_2
WHERE TABLE_2.ID = SRC1.ID
;
请检查附加的示例数据。
问题是,查询仍然获得 ACTIVE 记录(ID
和 END_DTTM IS NULL
),因为 ID
和 END_DTTM IS NOT NULL
相同。
我也尝试创建一个 END_DTTM_FLG
--> case when END_DTTM IS NOT NULL THEN 1 ELSE 2 END END_DTTM_FLG
。我的想法是查找每个集合的ID
,如果ID
有END_DTTM_FLG =2
那么不应该获取对应的ID
。
如何查找 TABLE_1
并检查每个 END_DTTM_FLG
的 ID
?
请帮我解决这个问题!
谢谢! ^_^
我是这样理解的
示例数据(更改会话只是为了设置日期格式;您不必这样做):
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> select * from table_1 order by id, end_dttm nulls last;
ID END_DTTM
---------- ----------
4157061694 21.06.2021
4157061694 21.06.2021
4157061694 23.06.2021
4157061694
4157064676 19.01.2021
4157064676 20.01.2021
6 rows selected.
SQL> select * from table_2;
ID
----------
4157061694
4157064676
从 table_2 中删除其 ID 在 table_1 中为“非活动”的行:
SQL> delete from table_2 b
2 where not exists (select null
3 from table_1 a
4 where a.id = b.id
5 and a.end_dttm is null
6 );
1 row deleted.
结果:
SQL> select * from table_2;
ID
----------
4157061694
SQL>
或者:
SQL> rollback;
Rollback complete.
SQL> delete from table_2 b
2 where b.id not in (select distinct a.id
3 from table_1 a
4 where a.end_dttm is null
5 );
1 row deleted.
SQL> select * from table_2;
ID
----------
4157061694
SQL>
希望你能帮帮我!
要求是 clean-up/delete 来自 TABLE_2 的 INACTIVE 记录。
INACTIVE 记录条件 是当 ID
记录有 END_DTTM IS NOT NULL
并且没有 ID
与 [=16= 相同的合作伙伴记录].
意味着如果 ID
有 NULL END_DTTM
,那么 ID
仍然有效。
我先进行了查询以获取 INACTIVE 记录,然后在获取正确数据时添加 DELETE 语法。
示例查询:
WITH SRC1 AS (
SELECT ID
FROM TABLE_1
WHERE END_DTTM IS NOT NULL
)
SELECT ID
FROM TABLE_2
WHERE TABLE_2.ID = SRC1.ID
;
请检查附加的示例数据。
问题是,查询仍然获得 ACTIVE 记录(ID
和 END_DTTM IS NULL
),因为 ID
和 END_DTTM IS NOT NULL
相同。
我也尝试创建一个 END_DTTM_FLG
--> case when END_DTTM IS NOT NULL THEN 1 ELSE 2 END END_DTTM_FLG
。我的想法是查找每个集合的ID
,如果ID
有END_DTTM_FLG =2
那么不应该获取对应的ID
。
如何查找 TABLE_1
并检查每个 END_DTTM_FLG
的 ID
?
请帮我解决这个问题!
谢谢! ^_^
我是这样理解的
示例数据(更改会话只是为了设置日期格式;您不必这样做):
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> select * from table_1 order by id, end_dttm nulls last;
ID END_DTTM
---------- ----------
4157061694 21.06.2021
4157061694 21.06.2021
4157061694 23.06.2021
4157061694
4157064676 19.01.2021
4157064676 20.01.2021
6 rows selected.
SQL> select * from table_2;
ID
----------
4157061694
4157064676
从 table_2 中删除其 ID 在 table_1 中为“非活动”的行:
SQL> delete from table_2 b
2 where not exists (select null
3 from table_1 a
4 where a.id = b.id
5 and a.end_dttm is null
6 );
1 row deleted.
结果:
SQL> select * from table_2;
ID
----------
4157061694
SQL>
或者:
SQL> rollback;
Rollback complete.
SQL> delete from table_2 b
2 where b.id not in (select distinct a.id
3 from table_1 a
4 where a.end_dttm is null
5 );
1 row deleted.
SQL> select * from table_2;
ID
----------
4157061694
SQL>