Фильтровать сопоставленный запрос. Оставить соединение в базе данных доступа. - PullRequest
0 голосов
/ 05 января 2019

Вот сценарий. В этой системе управления запасами есть предметы. Предметы могут быть составлены и сделать составные предметы. Например. Монитор, системный блок, клавиатура, мышь могут быть составлены в A1 (составной элемент)

Когда я назначаю элемент составному элементу, я использую поле со списком для создания элементов и выбора элементов. Затем я хочу сузить генерацию комбо-бокса только для элементов, которые не входят в составные элементы. (например, мышь m1 назначена составленному элементу A1. С другой стороны, я не хочу видеть ее в своем поле со списком) Я сделал следующий бесподобный запрос, чтобы отфильтровать элементы.

SELECT Item.ITEMID, Item.SN, Item.TYPE, Item.BRAND,
       Item.LOCATION, Item.COMMENCEDDATE, Item.CONDEMNDATE,
       Type.TypeName
FROM Type INNER JOIN
     (Item LEFT JOIN
      ComposedIItem
      ON Item.[ITEMID] = ComposedIItem.[ITEMID]
     )
     ON Type.TYPEID = Item.TYPE
WHERE (((ComposedIItem.ITEMID) Is Null) XOR 
       (((ComposedIItem.ITEMID) Is Not Null) AND
       ((ComposedIItem.DETACHEDDATE) Is Not Null))
      );

Конечно, существует ситуация, когда элемент может быть отделен от составного элемента, и позже он может быть снова назначен составным элементам.

В снимке вы можете найти мои работы.

sql работает хорошо, пока я не отсоединю его от составного элемента и снова не назначу его другому. Затем этот элемент все еще появляется в поле со списком.

Есть предложения?

Вот набор данных https://imgur.com/a/EdRRbOx

1 Ответ

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

Если вы хотите Items, которых нет в любых неоткрепленных составных элементов, то я думаю not exists:

select i.*, t.TypeName
from Item as i INNER JOIN
     Type as t
     on t.TYPEID = i.TYPE
where not exists (select 1
                  from ComposedIITem ci
                  where i.itemid = ci.itemid and
                        ci.detacheddate is null
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...