Saya memiliki tabel daftar kedekatan di mana saya perlu mengkloning kumpulan node dan memasukkannya ke cabang baru. Pada dasarnya saya ingin mengkloning kumpulan node yang memiliki struktur yang sama dengan node induk di cabang baru. Saya menggunakan tabel temp di mana saya memiliki sumber dan menyisipkan node. Saya mencoba menggabungkan tabel temp demi item dan menggunakan CTE tetapi hasilnya salah.
Saya menguji jawaban ini tetapi ternyata tidak berfungsi jika node induk sama untuk lebih dari 1 item.
Bagaimana cara memperbarui node induk (tidak termasuk node root) dengan cara yang benar?
Apakah ada cara untuk memperbaruinya tanpa menggunakan tabel temp?
Meja
|node|parent|item|
| 1 | Null | a |
| 2 | 1 | b |
| 3 | 1 | c |
Node yang dikloning
|node|parent|item|
| 4 | Null | a |
| 5 | 1 | b |
| 6 | 1 | c |
Tabel suhu
|inserted_node|old_node|item|old_parent|
| 4 | 1 | a | Null |
| 5 | 2 | b | 1 |
| 6 | 3 | c | 1 |
Hasil yang diharapkan
|node|parent|item|
| 1 | Null | a |
| 2 | 1 | b |
| 3 | 1 | c |
| 4 | Null | a |
| 5 | 4 | b |
| 6 | 4 | c |
Hasil yang salah
|node|parent|item|
| 1 | Null | a |
| 2 | 1 | b |
| 3 | 1 | c |
| 4 | Null | a |
| 5 | 5 | b |
| 6 | 6 | c |
Kueri SQL
;WITH CTE AS
(
SELECT
t.parent AS old_parent,
t2.node AS new_parent
FROM Table t
LEFT JOIN @TempTable t2 ON t2.item = t.item
WHERE t.node IN (SELECT node FROM @TempTable ) AND t.parent IS NOT NULL
)
UPDATE CTE
SET old_parent = new_parent