如何提取不符合条件的记录?

时间:2019-01-31 17:59:39

标签: sql ms-access

亲爱的

我正在使用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。

2 个答案:

答案 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)上创建索引。