Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从自引用表获取家长状态_Mysql_Self Reference - Fatal编程技术网

Mysql 从自引用表获取家长状态

Mysql 从自引用表获取家长状态,mysql,self-reference,Mysql,Self Reference,假设您有下表: 项目(项目id、项目父项) ... 它是一个自引用表,因为item_parent引用item_id 您将使用哪个MySQL支持的SQL查询来选择表中的每个项,以及一个布尔值,该布尔值指示该项是否为父项/是否有其他项引用它 如果表中有以下数据: item_id item_parent ----------- ----------- 1 0 2 0 3 2

假设您有下表: 项目(项目id、项目父项) ... 它是一个自引用表,因为item_parent引用item_id

您将使用哪个MySQL支持的SQL查询来选择表中的每个项,以及一个布尔值,该布尔值指示该项是否为父项/是否有其他项引用它

如果表中有以下数据:

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是如此强大。是的,这是一个疯狂的猜测,你可能想得到的计数,而不仅仅是一个布尔值,这就是为什么我建议这种方法。我很幸运!;-)如果你只想得到布尔值,就用拟牛顿解,但如果你想得到子数,就用这个。我很幸运有这么好的答案。再次感谢!