如何知道 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
我处理这个问题几个小时了,但我找不到答案。
我有一个 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