我有一个棘手的问题。我在MS SQL 2005中有一个非常复杂的视图,结果如下:
| ID | Name | ParentID |
--------------------------------
| 1 | Cars | 1 |
| 2 | Audi | 1 |
| 3 | Toyota | 1 |
| 4 | Trucks | 4 |
现在我希望我的观点能够识别ID为4的记录中没有子节点,并因此将其分开。
有什么想法吗? ;)
感谢
托本
答案 0 :(得分:2)
由于父行的ParentID = ID
,您希望找到只有给定ParentID的一个实例的那些:
SELECT
ParentID
FROM
myTable
GROUP BY
ParentID
HAVING
COUNT(1) = 1
答案 1 :(得分:1)
WHERE ParentID NOT IN (SELECT ParentID
FROM TABLE
WHERE ParentID <> ID)
答案 2 :(得分:1)
这些将是那些没有孩子的人:
SELECT a.*
FROM theView a
LEFT JOIN theView b ON (a.a = b.ParentId AND b.Id <> b.ParentId)
WHERE b.Id IS NULL
但ID 2和ID 3也没有孩子。
答案 3 :(得分:0)
SELECT *
FROM Table as parent
WHERE EXISTS (
SELECT child.ParentID
FROM Table as child
WHERE parent.ParentId = child.id
and parent.id != child.id
)
如果没有父母的行引用自己,那很简单:
SELECT *
FROM Table as parent
WHERE parent.parentId != parent.id