SQL从结果数据中选择条件数据

时间:2016-09-06 06:52:54

标签: mysql parent-child

表格结构:

|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   |

然后用相同的表重复,第二个查询= 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,但是浪费了很多。 它有可能像那样构建吗?

谢谢你。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

避免使用子查询的另一个选择是使用自联接: -

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。