我有一個由 10 萬多條記錄組成的多父子層次結構。這是一個小的子集。
| 孩子 | 家長 |
|---|---|
| 1 | 2 |
| 1 | 3 |
| 2 | 3 |
我需要檢查 Parent 列中的每個值,并檢查 Child 列中是否也存在相同的值。如果沒有,則使用 (value, NULL) 創建一行。在此示例中,值 3 不存在于 Child 列中,因此我需要它來創建一個包含值 (3, NULL) 的新行。
| 孩子 | 家長 |
|---|---|
| 3 | 空值 |
| 1 | 2 |
| 1 | 3 |
| 2 | 3 |
我的代碼沒有回傳錯誤,但它沒有做我想要它做的事情。
INSERT 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 行帶有 (value, NULL)。當有這么多帶有 (NULL, NULL) 的新行但不確定為什么時,它必須以某種方式總是跳到 else 子句。
使用 SQL Server Management Studio 17。非常感謝任何幫助。
uj5u.com熱心網友回復:
你不應該case在這里使用,而是使用自左連接:
INSERT 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364502.html
標籤:sql sql-server 亲子
