Получение родительского статуса из самореферентной таблицы - PullRequest
1 голос
/ 05 февраля 2010

Допустим, у вас есть следующая таблица: items (item_id, item_parent) ... и это самообращающаяся таблица, так как item_parent ссылается на item_id.

Какой SQL-запрос с поддержкой MySQL вы бы использовали для ВЫБОР каждого элемента в таблице вместе с логическим значением, которое указывает, является ли этот элемент родительским или имеет другие элементы, ссылающиеся на него?

Если в таблице есть следующие данные:

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 ]

2 голосов
/ 05 февраля 2010

Возвращает все элементы и целое число, указывающее, сколько дочерних элементов имеет каждый:

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
2 голосов
/ 05 февраля 2010
SELECT  i.item_id,
        item_id IN
        (
        SELECT  item_parent
        FROM    items
        )
FROM    items i
...