[英]How to extract records which do not met a condition?
亲爱,
我正在使用MS Access,需要弄清楚以下几点:
假设我有一个包含2个表的查询(内部联接)。
表1: ITEM_ID,ITEM_NAME。
表2: ITEM_ID,CATEGORY_ID。
多个CATEGORY_ID被分配给一个ITEM_ID。
数据集确实很大。 非常容易出现性能问题。
我需要提取所有未分配特定类别ID(例如“ 003”)的ITEM_ID。
我无法对字段CATEGORY_ID 不喜欢“ 003”使用条件,因为数据集非常大,查询想提取所有具有其他CATEGORY_ID值(例如“ 001、002、004-999”的ITEM_ID + ITEM_NAME) )=性能问题。
有办法吗? 我需要确定未分配类别003的库存物料。
请让我知道,您的帮助将不胜感激。
“ n00b警报”请耐心等待,因为我是MS Access查询创建的真正初学者。
谢谢Petr J.
您将使用not exists
:
select i.*
from items as i
where not exists (select 1
from categories as c
where c.item_id = i.item_id and c.category_id = "003"
);
为了提高性能,您需要在categories(item_id, category_id)
上建立索引。
您可能想尝试left join
:
SELECT t1.ITEM_ID, t1.ITEM_NAME
FROM Table1 AS t1
LEFT JOIN (SELECT ITEM_ID FROM Table2 WHERE CATEGORY_ID = "003") AS t2
ON t1.ITEM_ID = t2.ITEM_ID
WHERE t2.ITEM_ID Is Null;
我建议在CATEGORY_ID
上创建一个索引,如果没有参照完整性,也要在ITEM_ID
上创建索引(均为Table2)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.