SQL Server: Как получить все дочерние записи, поданные родительский идентификатор сам ссылка на таблицу

Я был удивлен инициализаторами экземпляра на днях. Я удалял некоторые свернутые кодом методы и закончил тем, что создал несколько инициализаторов экземпляра:

public class App {
    public App(String name) { System.out.println(name + "'s constructor called"); }

    static { System.out.println("static initializer called"); }

    { System.out.println("instance initializer called"); }

    static { System.out.println("static initializer2 called"); }

    { System.out.println("instance initializer2 called"); }

    public static void main( String[] args ) {
        new App("one");
        new App("two");
  }
}

Выполнение main метод отобразится:

static initializer called
static initializer2 called
instance initializer called
instance initializer2 called
one's constructor called
instance initializer called
instance initializer2 called
two's constructor called

я предполагаю, что они были бы полезны, если бы Вы имели несколько конструкторов и нуждались в общем коде

, Они также обеспечивают синтаксический сахар для инициализации Ваших классов:

List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};

Map<String,String> codes = new HashMap<String,String>(){{ 
  put("1","one"); 
  put("2","two");
}};
44
задан Maksim Vi. 11 February 2011 в 02:30
поделиться

2 ответа

Вы можете попробовать это

DECLARE @Table TABLE(
        ID INT,
        ParentID INT,
        NAME VARCHAR(20)
)

INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 1, NULL, 'A'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 2, 1, 'B-1'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 3, 1, 'B-2'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 4, 2, 'C-1'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 5, 2, 'C-2'


DECLARE @ID INT

SELECT @ID = 2

;WITH ret AS(
        SELECT  *
        FROM    @Table
        WHERE   ID = @ID
        UNION ALL
        SELECT  t.*
        FROM    @Table t INNER JOIN
                ret r ON t.ParentID = r.ID
)

SELECT  *
FROM    ret
64
ответ дан 26 November 2019 в 22:13
поделиться

Если вы не используете Oracle, ваша структура таблицы не подходит для описанной проблемы. Что вы пытаетесь сделать, так это захватить иерархию (пройти по древовидной структуре).

Есть статья More Trees & Hierarchies in SQL , в которой описывается один метод решения проблемы иерархии. По сути, он добавляет столбец «происхождение» с описанием иерархии к каждой строке.

0
ответ дан 26 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: