表格结构:
|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,但是浪费了很多。 它有可能像那样构建吗?
谢谢你。
答案 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;
答案 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。