Как извлечь записи, которые не отвечают условию? - PullRequest
0 голосов
/ 31 января 2019

Уважаемые,

Я использую MS Access и мне нужно выяснить следующее:

Допустим, у меня есть запрос с 2 таблицами (внутреннее объединение).

Таблица 1: ITEM_ID, ITEM_NAME.

Таблица 2: ITEM_ID, CATEGORY_ID.

Несколько идентификаторов CATEGORY_ID назначены одному ITEM_ID.

Набор данных действительно огромен;очень склонны к проблемам с производительностью.

Мне нужно извлечь все ITEM_ID, которым не определен идентификатор категории - скажем, "003" - назначен.

Я не могу использовать критерии для поля CATEGORY_ID Не похоже на "003" , так как набор данных настолько велик, и запрос хотел бы извлечь все ITEM_ID + ITEM_NAME, которые имеют другие значения CATEGORY_ID (скажем, "001, 002, 004-999 ") = проблемы с производительностью.

Есть ли способ сделать это?Мне нужно определить на складе материалы, которые не относятся к категории 003.

Пожалуйста, дайте мне знать, ваша помощь будет высоко оценена.

"n00b alert" Будьте терпеливы со мной, пожалуйста, как яЯ настоящий новичок в создании запросов MS Access.

Спасибо, Петр Дж.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Возможно, вы захотите попробовать 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).

0 голосов
/ 31 января 2019

Вы бы использовали 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...