Добавление новых строк (значение, NULL) в иерархию с несколькими родительскими дочерними элементами

0

Вопрос

У меня есть иерархия с несколькими родительскими дочерними элементами, состоящая из более чем 100 тысяч записей. Это небольшое подмножество.

Ребенок Родитель
1 2
1 3
2 3

Мне нужно просмотреть каждое значение из родительского столбца и проверить, существует ли такое же значение и в дочернем столбце. Если это не так, то создайте строку с (значением, NULL). В этом примере значение 3 не существует в дочернем столбце, поэтому оно мне нужно для создания новой строки со значениями (3, NULL).

Ребенок Родитель
3 нулевой
1 2
1 3
2 3

Мой код не возвращает ошибку, но он не делает то, что я хочу.

INSERT IGNORE INTO #table (child, parent)
SELECT (CASE WHEN parent not in (Select child from #table) THEN parent END) as child, Null
FROM #table

Я получаю много новых строк с (NULL,NULL), но 0 строк с (значением, NULL). Он должен каким-то образом всегда переходить к предложению else, когда появляется так много новых строк с (NULL, NULL), но не уверен, почему.

Использование среды SQL Server Management Studio 17. Мы будем очень признательны за любую помощь.

parent-child sql sql-server
2021-11-23 14:41:35
1

Лучший ответ

1

Вы не должны использовать case здесь, но вместо этого самостоятельное левое соединение:

INSERT IGNORE INTO #table (child, parent)
SELECT DISTINCT t1.parent, NULL
FROM #table t1
LEFT JOIN #table t2
    ON t1.parent = t2.child
WHERE t2.child IS NULL

Смотрите живую демонстрацию на Db<>Fiddle<>

2021-11-23 14:53:26

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Популярное в этой категории

Популярные вопросы в этой категории