1

假设您有下表: 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}

4

2 回答 2

2
SELECT  i.item_id,
        item_id IN
        (
        SELECT  item_parent
        FROM    items
        )
FROM    items i
于 2010-02-05T16:45:23.690 回答
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
于 2010-02-05T16:47:01.917 回答