Mysql 从自引用表获取家长状态
假设您有下表: 项目(项目id、项目父项) ... 它是一个自引用表,因为item_parent引用item_id 您将使用哪个MySQL支持的SQL查询来选择表中的每个项,以及一个布尔值,该布尔值指示该项是否为父项/是否有其他项引用它 如果表中有以下数据:Mysql 从自引用表获取家长状态,mysql,self-reference,Mysql,Self Reference,假设您有下表: 项目(项目id、项目父项) ... 它是一个自引用表,因为item_parent引用item_id 您将使用哪个MySQL支持的SQL查询来选择表中的每个项,以及一个布尔值,该布尔值指示该项是否为父项/是否有其他项引用它 如果表中有以下数据: item_id item_parent ----------- ----------- 1 0 2 0 3 2
item_id item_parent
----------- -----------
1 0
2 0
3 2
4 2
5 3
。。。查询应能够检索以下对象集:
{“item_id”:1,“is_parent”:0}{“item_id”:2,“is_parent”:1}
{“item_id”:3,“is_parent”:1}
{“item_id”:4,“is_parent”:0}
{“item_id”:5,“is_parent”:0}返回所有项和一个整数,指定每个项有多少子项:
SELECT T1.item_id, COUNT(T2.item_parent) AS is_parent
FROM items AS T1
LEFT JOIN items AS T2
ON T1.item_id = T2.item_parent
GROUP BY item_id
如果需要布尔值(0或1),只需将其更改为:
SELECT T1.item_id, COUNT(T2.item_parent) > 0 AS is_parent
FROM items AS T1
LEFT JOIN items AS T2
ON T1.item_id = T2.item_parent
GROUP BY item_id
这将返回所有项和一个整数,指定每个项有多少子项:
SELECT T1.item_id, COUNT(T2.item_parent) AS is_parent
FROM items AS T1
LEFT JOIN items AS T2
ON T1.item_id = T2.item_parent
GROUP BY item_id
如果需要布尔值(0或1),只需将其更改为:
SELECT T1.item_id, COUNT(T2.item_parent) > 0 AS is_parent
FROM items AS T1
LEFT JOIN items AS T2
ON T1.item_id = T2.item_parent
GROUP BY item_id
我喜欢SQL,但它不会显示没有父项的项,是吗?看起来Emanuil想从查询中取回所有项目,第二列是一个布尔值,显示它的家长状态。@AlCrowley:是的,它将显示所有项目,而不仅仅是那些有孩子的项目。中的
谓词位于SELECT
子句中,而不是WHERE
。我喜欢SQL,但它不会显示没有父项的项,是吗?看起来Emanuil想从查询中取回所有项目,第二列是一个布尔值,显示它的家长状态。@AlCrowley:是的,它将显示所有项目,而不仅仅是那些有孩子的项目。
中的谓词位于SELECT
子句中,而不是WHERE
.Brilliant!获取子事件计数的查询更好。SQL是如此强大。是的,这是一个疯狂的猜测,你可能想得到的计数,而不仅仅是一个布尔值,这就是为什么我建议这种方法。我很幸运!;-)如果你只想得到布尔值,就用拟牛顿解,但如果你想得到子数,就用这个。我很幸运有这么好的答案。再次感谢!明亮的获取子事件计数的查询更好。SQL是如此强大。是的,这是一个疯狂的猜测,你可能想得到的计数,而不仅仅是一个布尔值,这就是为什么我建议这种方法。我很幸运!;-)如果你只想得到布尔值,就用拟牛顿解,但如果你想得到子数,就用这个。我很幸运有这么好的答案。再次感谢!