根据另一列的内容排除SQL搜索的结果

时间:2011-07-27 13:38:53

标签: sql select

我正在使用的表有3个重要的列,可以在表中排除条目。我会打电话给他们:

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

我很确定这是错的,但我不确定如何做对。

1 个答案:

答案 0 :(得分: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'
    )