我正在处理这个问题几个小时,我找不到答案的方法。
我有一个表格,其中包含一个产品的最大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
我希望你能帮助我。我被困了,这可能很简单,但我有一个被困的时候。在此先感谢您的任何帮助
答案 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