2011-07-27 90 views
0

我正在使用的表有3個重要的列,用於排除表中的條目。我會打電話給他們:根據另一列的內容排除SQL搜索的結果

SampleTable:

Thing_Type (varchar) 
Thing_ID (int) 
Parent_ID (int) 

我想找到一個特定類型的所有「葉」條目。但是,該類型的條目可能有一個不屬於該類型的子項,因此,如果不先將表格僅篩選到該類型,我不希望將其排除。然後我想要包含所有具有不存在於ParentID列中任何位置的ID的條目。

在我使用的工具中沒有EXISTS(不是我確定它會有幫助)。

忽略的事實,我使用的工具不喜歡以下內容,這可能不是語法正確的,這是我覺得它應該是這樣的。

SELECT * FROM (
    SELECT * 
    FROM SampleTable 
    WHERE SampleTable.Thing_Type = 'DesiredType' 
) 
WHERE Thing_ID NOT IN Parent_ID 

我敢肯定,這是錯誤的,但我不知道怎麼做是正確的。

+0

樣本數據和預期輸出通常對此類問題很有幫助,特別是當存在卷積邏輯時。它還有助於告訴人們你正在使用什麼工具以及哪種SQL變體。 –

回答

1

首先,NOT IN必須違背集合,而不是單個值,所以NOT IN parent_id實際上沒有意義。這是解決此問題的一種方法:

SELECT 
    thing_type, 
    thing_id, 
    parent_id 
FROM 
    Sample_Table T1 
WHERE 
    thing_type = 'Desired Type' AND 
    thing_id NOT IN (
      SELECT parent_id 
      FROM Sample_Table T2 
      WHERE T2.thing_type = 'Desired Type' 
    ) 
+0

非常感謝 - 這非常棒! – Samthere

相關問題