繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM