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;
另一种避免使用子查询的方法是使用自连接:-
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。
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;
另一种避免使用子查询的方法是使用自连接:-
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。