SQL Select 条件数据来自结果数据

SQL Select data with condition from result data

Table结构:

|Category_id |Parent_id|
|     193    |   185   |
|     200    |   193   |
|     11     |   193   |
|     150    |   193   |
|     145    |   185   |
|     165    |   145   |
|     123    |   11    |

第一个查询 = select * from table where parent_id = 185,结果:

|Category_id |Parent_id|
|     193    |   185   |
|     145    |   185   |

然后用相同的 table 重复,第二个查询 = select * from table where parent_id = 193 结果:

|Category_id |Parent_id|
|     200    |   193   |
|     11     |   193   |
|     150    |   193   |

我想做的是使用

这样的单个查询来计算(来自第二个查询的 category_id)

select *,(count(select * from table where parent_id = ..... )) AS count from table where parent_id = 185 order by count ASC 结果如下:

|Category_id |Parent_id| Count |
|     193    |   185   |   3   |
|     145    |   185   |   1   |

我知道我可以做到,如果 1 对 1 地做,但它太浪费了。 可以这样建吗?

提前致谢。

SELECT 
TT1.*,
  (
    SELECT COUNT(TT2.Category_id) 
    FROM table TT2 
    WHERE TT2.Parent_id = TT1.Category_id
  ) count 
FROM table TT1
WHERE TT1.Parent_id = 185;

SQL Fiddle

另一种避免使用子查询的方法是使用自连接:-

SELECT t1.parent_id,
        t1.category_id,
        COUNT(t2.category_id)
FROM table t1
LEFT OUTER JOIN table t2 ON t1.category_id = t2.parent_id
WHERE t1.parent_id = 185
GROUP BY t1.parent_id,
        t1.category_id

这将统计具有 0 个或更多子记录的父记录。如果您只想要那些有 1 个或多个子记录的记录,则将 LEFT OUTER JOIN 更改为 INNER JOIN。