Присоединяйтесь - НЕ (A2007) - PullRequest
       2

Присоединяйтесь - НЕ (A2007)

0 голосов
/ 21 сентября 2010

У меня есть классическая конструкция формы с двумя списками (переместите строку из этого поля в это поле ...) Я хочу, чтобы в поле слева содержались все строки, которые НЕ находятся в поле справа.

Базовые данные находятся в отношении многих ко многим. PartNbr - XREF - Источник, где часть может иметь 0 или более источников ... так что у меня есть три таблицы, таблица Master Item, XREF и Source (также называемая "TP"). Поле справа выбирает всех партнеров из Master Item, у которых есть записи в таблице XREF, и показывает их в поле справа.

В поле слева должны отображаться все остальные детали в основной записи элемента TP (Сторонние поставщики) (детали Sourcable), которые НЕ находятся в поле справа. Поскольку это отношение многие ко многим, я использовал конструкцию SELECT DISTINCT. При этом источники строк для двух полей:

Поле слева («От»):

SELECT DISTINCT tblTPitemMaster.TPItemID, 
     tblTPitemMaster.TPItemVendorID, 
     tblTPitemMaster.TPItemNbr, tblTPitemMaster.TPItemDescription, 
     tblTPitemMaster.TPItemUnitCost, tblXrefItemTPItem.TPXRCPASItemID 
FROM tblTPitemMaster 
LEFT JOIN tblXrefItemTPItem 
     ON tblTPitemMaster.TPItemID = tblXrefItemTPItem.TPXRTPItemID  
WHERE ((TPItemVendorID=590) AND (TPXRCPASItemID <> 10546))  
ORDER BY tblTPitemMaster.TPItemVendorID

Вправо ("К") Поле:

SELECT tblXrefItemTPItem.TPXRPreferredVendor AS Rank, 
     tblVendor.[Vendor Name], tblTPitemMaster.TPItemNbr, 
     tblTPitemMaster.TPItemDescription, tblTPitemMaster.TPItemUnitCost, 
     tblXrefItemTPItem.TPXRID 
FROM tblVendor INNER JOIN (tblTPitemMaster 
INNER JOIN tblXrefItemTPItem 
     ON tblTPitemMaster.TPItemID = tblXrefItemTPItem.TPXRTPItemID) 
     ON tblVendor.ID = tblTPitemMaster.TPItemVendorID  
WHERE TPXRCPASItemID=10546   
ORDER BY tblXrefItemTPItem.TPXRPreferredVendor

Проблема в том, что я получаю каждую основную запись TPItem в левом поле. Должно быть что-то простое. Идеи?


Jim

1 Ответ

0 голосов
/ 21 сентября 2010

Все предметы, которых нет в соединительной таблице?

LEFT JOIN tblXrefItemTPItem 
     ON tblTPitemMaster.TPItemID = tblXrefItemTPItem.TPXRTPItemID 
WHERE tblXrefItemTPItem.TPXRTPItemID Is Null

Кстати, запрос будет намного проще читать с псевдонимами:

SELECT DISTINCT m.TPItemID, 
     m.TPItemVendorID, 
     m.TPItemNbr, m.TPItemDescription, 
     m.TPItemUnitCost, x.TPXRCPASItemID 
FROM tblTPitemMaster m
LEFT JOIN tblXrefItemTPItem x
     ON m.TPItemID = x.TPXRTPItemID  
WHERE x.TPXRTPItemID Is Null
AND TPItemVendorID=590
ORDER BY m.TPItemVendorID

Я думаю, что TPXRCPASItemID происходит из соединительной таблицы и поэтому не имеет значения.

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