2010-09-21 50 views
0

我有一個經典的雙列表框構造(從這個框移動一行到那個框......)我希望左邊的框包含所有不在框中的行在右邊。加入 - 非(A2007)

底層數據處於多對多關係。 PartNbr - XREF - Source,其中零件可能有0個或更多來源...所以我有三個表格,Item Master,XREF和Source(又名「TP」)表格。右側的框選擇來自項目主文件夾中具有XREF表中記錄的所有partnbrs,並在右側的框中顯示它們。

左側的方框應顯示TP(第三方)項目主人(Sourcable部分)中的所有其他部件,這些部件都位於右側的方框內。由於它是多對多的關係,我使用了SELECT DISTINCT結構。謹此rowsources兩個框:

左( 「來自」)框:

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主記錄在左側的框中。一定是簡單的事情。想法?


吉姆

回答

0

所有項目不在聯接表?

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

BTW查詢將是一個更容易與別名閱讀:

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來自結表等無關。

+0

當然,我使用Access的查詢引擎來生成sql,所以這就是冗長的原因。你說的是別名。我會在一杯或兩杯咖啡後嘗試你的建議。謝謝! – 2010-09-22 12:52:12

+0

好的,問題是該項目不得在聯結表中或在聯結表中並且不與CPASItemID相關。 CPASItem ID可以有許多TPItemID,並且TPItemID可以有許多CPASItemID。而供應商必須是590。 – 2010-09-22 13:11:24