如何知道 Oracle 中的 table 上是否不存在记录

How to know if a record DOESN'T exists on a table in Oracle

我处理这个问题几个小时了,但我找不到答案。

我有一个 table 在不同时期(列名和数字)的产品(让我们这样称呼它)最多 4 条记录。我正在尝试 return 没有特定类型 CONSUMPTION_TYPE_ID 的那些。但是没用。

我简单解释一下。我有一个包含这些字段的 table(还有更多,但这些都很好)

    product_id - CONSUMPTION_TYPE_ID - consumption_period
    123              103                   1
    123              104                   1
    123              107                   1
    123              108                   1

我需要 return 那些没有特定消费类型的,假设缺少类型 107(该行不存在),select 查询应该显示其他 3 个或任何礼物。我不介意做同样的 select 4 次,我也可以尝试为它做一个游标并使用循环来检查每一个。关键是,带有 "not in" 或 "not exists" 的查询类型不起作用。它给了我如下所示的结果,但是当我查询 "consumption_period" 时,它显示缺少的 "CONSUMPTION_TYPE_ID",那是因为 "not in" 子句只是隐藏了结果。

    this is what I need.
    select * from t1 where CONSUMPTION_TYPE_ID != 108;

    product_id - CONSUMPTION_TYPE_ID - consumption_period
    123              103                   1
    123              104                   1
    123              107                   1

我希望你能帮我解决这个问题。我被困住了,这可能很简单,但我正在经历那些被困的时期之一。在此先感谢您的帮助

您可能应该发布那个 NOT EXISTS 无效的查询,因为这是执行此操作的正确方法。

如果我没看错您的要求:没有特定 consumption_type_id 记录的所有产品。

SELECT DISTINCT product_id
FROM t1 t
WHERE NOT EXISTS
(SELECT 1 FROM t1
WHERE t.product_id = product_id
AND Consumption_Type_ID = ?)

这里显而易见的答案是搜索 CONSUMPTION_TYPE_ID = 108 并让周围的代码检查是否缺少行,而不是检查行是否存在。

如果您确实需要为不在此 table 中的每个 consumption_type_id 排 return,那么您可能应该从查找 table 中选择 consumption_type_id:

select *
from consumption_type ct
where not exists (select * 
                  from t1 
                  where t1.consumption_type_id = ct.consumption_type_id)
and ct.consumption_type_id = 108