2015-10-05 44 views
1

我有1個與12個列,該列的4具有字段,諸如大表:VERSIONID,StatusID,用戶ID等。查詢涉及多個表:INNER JOIN排除某些行

我有3個小表版本,狀態等...此表格包含如下信息:「VersionID」1 = Active「; VersionID 2 = Disabled ... etc」對於StatusID和OwnerID也是如此。 我創建了一個Query,它顯示來自「Big Table」的信息,並且包含在VersionID,StatusID等中的信息應該從較小的表中顯示,例如:如果在大表中顯示的VersionID是「1 「我想讓它顯示..in這種情況下,定義‘活動’

我設法通過使用下面的代碼來做到這一點:

SELECT 
    Object.Type, Object.ID, Object.Key, Object.IsInactive, 
    Version.Version AS VersionID, 
    Status.StatusText AS StatusID, 
    ObjectDetail.BalancePosition, ObjectDetail.FrequencyID, 
    ObjectDetail.FrequencyTimeLagID, ObjectDetail.ObjectName, 
    ObjectDetail.Description, ObjectDetail.ValueSpecification, 
    ObjectDetail.Computation, ObjectDetail.StorageSystemID, 
    ObjectDetail.StorageSystemField, ObjectDetail.TableFunctionalDatamodel, 
    ObjectDetail.OwnerID 
FROM 
    Version 
    INNER JOIN 
    (
     [Object] 
     INNER JOIN 
     (
      ObjectDetail 
      LEFT JOIN 
      Status 
       ON ObjectDetail.[StatusID] = Status.[ID] 
     ) 
      ON Object.ID = ObjectDetail.ObjectID 
    ) 
     ON Version.ID = ObjectDetail.VersionID 
WHERE (((Object.Type)=0) AND ((Object.ID) Is Null)) 
    OR (((Object.Type)=0) AND ((Object.Key) Is Null)) 
    OR (((Object.Type)=0) AND ((Object.IsInactive) Is Null)) 
    OR (((Object.Type)=0) AND ((Version.Version) Is Null) AND ((ObjectDetail.VersionID) Is Null)) 
    OR (((Object.Type)=0) AND ((Status.StatusText) Is Null)) 
    OR (((ObjectDetail.BalancePosition) Is Null)) 
    OR (((ObjectDetail.FrequencyID) Is Null)) 
    OR (((ObjectDetail.FrequencyTimeLagID) Is Null)); 

這一切正常,問題是錯誤的條目例如在狀態ID - 「999」中,我們的「999」在小表中沒有定義..我不希望顯示。我希望查詢只顯示沒有條目或沒有條目的字段e小表中的定義。

+0

請格式化查詢... –

回答

3

因此,您基本上不會查找在其列中具有無效值的行嗎?

您可以通過使用一個left join,只有包括null結果實現這一點:

SELECT a.x, b.y FROM BigTable a 
LEFT JOIN SmallTable1 b ON b.id = a.id 
WHERE b.id IS NULL 
+0

你好,是的,這是對的。我試過這樣:'選擇VERSIONID。 ObjectDetail,ID.Version FROM ObjectDetail INNER JOIN Version Version.ID = VersionID.ID WHERE VersionID.id NOT IN(SELECT id FROM Version);'但不知何故,我得到一個錯誤.. – adp

+0

錯誤:JOIN操作中的語法錯誤 – adp

+0

@GordThompson,是的,我剛剛看到,將刪除它,謝謝:) – epoch