如何在SQL中实现"hasChildren"SELECT语句?

Ste*_*ier 5 sql select

假设我有下表:

ID | parentID | MoreStuff
1  | -1       |  ...
2  |  1       |  ...
3  |  1       |  ...
4  |  2       |  ...
5  |  1       |  ...
Run Code Online (Sandbox Code Playgroud)

如何生成SQL SELECT语句以查明特定行是否包含子项?换句话说,我想知道ID 1是否有孩子,在这种情况下它有3个孩子.

我不确定如何创建SQL语句:

SELECT ID, hasChildren FROM myTable;
Run Code Online (Sandbox Code Playgroud)

在上面的SQL SELECT语句中,hasChildren会替换什么?

Ale*_*ini 17

没有组版本:

SELECT MyTable.Id, CASE WHEN EXISTS 
    (SELECT TOP 1 1  --you can actually select anything you want here
     FROM MyTable MyTableCheck 
     WHERE MyTableCheck.ParentId = MyTable.Id
    ) THEN 1 ELSE 0 END AS HasRows
FROM MyTable
Run Code Online (Sandbox Code Playgroud)


And*_*mar 12

加入表格自己查找是否有孩子:

SELECT 
    parent.id as ID
,   case when count(child.id) > 0 then 1 else 0 end as hasChildren 
FROM       myTable parent
LEFT JOIN  myTable child
ON         child.parentID = parent.ID
GROUP BY   parent.id
Run Code Online (Sandbox Code Playgroud)