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

时间:2015-04-22 21:07:19

标签: oracle rows

我正在处理这个问题几个小时,我找不到答案的方法。

我有一个表格,其中包含一个产品的最大4条记录(让我们这样称呼它)一段不同的时期(带有数字的列名)。我正在尝试返回那些没有特定类型的CONSUMPTION_TYPE_ID的那些。但它不起作用。

我会解释它很简单。我有一张包含这些字段的表格(还有更多,但这些字段很好)

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

我需要返回没有特定类型消费的那些,假设缺少类型107(行不存在),select查询应该显示其他3或任何存在。我不介意做同样的选择4次,我也可以尝试为它做一个游标并使用循环来检查每一个。关键是,“不在”或“不存在”的查询类型不起作用。它给我一个像下面给出的结果,但当我查询“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

我希望你能帮助我。我被困了,这可能很简单,但我有一个被困的时候。在此先感谢您的任何帮助

2 个答案:

答案 0 :(得分:0)

您可能应该发布不起作用的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 = ?)

答案 1 :(得分:0)

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

如果你真的需要一个不在此表中的consumption_type_id的行返回,那么你应该从查询表中选择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