我正在使用的表有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
我很确定这是错的,但我不确定如何做对。
答案 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'
)