Birden çok üst alt hiyerarşiye yeni satırlar (Değer, NULL) ekleme

0

Soru

100k + kayıttan oluşan birden çok üst alt hiyerarşim var. Bu küçük bir alt kümedir.

Çocuk Ebeveyn
1 2
1 3
2 3

Sütun Üst öğesinden her bir değeri gözden geçirmem ve sütun Alt öğesinde de aynı değerin olup olmadığını kontrol etmem gerekiyor. Değilse, (value, NULL) ile bir satır oluşturun. Bu örnekte, Alt sütunda 3 değeri mevcut değil, bu yüzden (3, NULL) değerleriyle yeni bir satır oluşturmam gerekiyor.

Çocuk Ebeveyn
3 boş
1 2
1 3
2 3

Kodum bir hata döndürmüyor, ancak yapmasını istediğim şeyi yapmıyor.

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) ile birçok yeni satır alıyorum, ancak (value, NULL) ile 0 satır alıyorum. (NULL, NULL) ile çok fazla yeni satır olduğunda, ancak neden olduğundan emin değilken, bir şekilde her zaman else yan tümcesine atlamalıdır.

SQL Server Management Studio'yu Kullanma 17. Herhangi bir yardım büyük beğeni topluyor.

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

En iyi cevabı

1

Hiç kullanmamalısın case burada, ama bunun yerine bir öz sol birleşim:

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<> ' da canlı demoya bakın

2021-11-23 14:53:26

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................