从自引用表中获取父级状态

时间:2010-02-05 16:39:58

标签: mysql self-reference

假设您有下表: items(item_id,item_parent) ...它是一个自引用表,因为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}

2 个答案:

答案 0 :(得分:2)

SELECT  i.item_id,
        item_id IN
        (
        SELECT  item_parent
        FROM    items
        )
FROM    items i

答案 1 :(得分:2)

这将返回所有项目和一个整数,指定每个项目的子项数:

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