亲爱的
我正在使用MS Access,需要确定以下内容:
假设我有一个包含2个表(内部联接)的查询。
表1: ITEM_ID,ITEM_NAME。
表2: ITEM_ID,CATEGORY_ID。
将多个CATEGORY_ID分配给一个ITEM_ID。
数据集非常庞大;非常容易出现性能问题。
我需要提取所有分配了 not 特定类别ID(例如“ 003”)的ITEM_ID。
我无法对字段CATEGORY_ID 不喜欢“ 003” 使用条件,因为数据集非常大,查询想提取所有具有其他CATEGORY_ID值的ITEM_ID + ITEM_NAME(例如“ 001、002、004-999”)=性能问题。
有办法做到吗?我需要确定未分配类别003的库存物料。
请告诉我,我们将非常感谢您的帮助。
“ n00b警报”请耐心等待,因为我是MS Access查询创建的真正初学者。
谢谢Petr J。
答案 0 :(得分:0)
您将使用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)
上建立索引。
答案 1 :(得分:0)
您可能想尝试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)上创建索引。