我需要修改以下代碼以搜索其中一個存活爲空而另一個不存在的組。目前,該查詢返回兩個都存在的組。我正在尋找所有在一個記錄A中的存活與另一個記錄B中的一個id不匹配的所有組,但僅在記錄B中的存活爲空的情況下。如何根據Oracle中的一個組中的2個不同標準比較2個不同的記錄?
SELECT *
FROM MY_TABLE t3
WHERE t3.GROUP_id IN (
SELECT t1.GROUP_id
FROM MY_TABLE t1, MY_TABLE t2
WHERE t1.id <> t2.id
AND t1.GROUP_id = t2.GROUP_id
AND t1.id <> t2.surv
AND t2.id <> t1.surv
);
這是返回差異,兩個倖存者都填充。我錯過了什麼?
編輯:
---------------------------------
| group | id | surv |
----------------------------------
| 1 | 1 | null |
| 1| | 2 | 1 |
| 2 | 3 | 107 |
| 2 | 4 | null |
| 3 | 5 | 89 |
| 3 | 6 | 89 |
----------------------------------
返回
---------------------------------
| group | id | surv |
----------------------------------
| 2 | 3 | 107 |
| 2 | 4 | null |
----------------------------------
原因: 組1具有ID 1個匹配到第二個記錄的監測網;因此我們不希望它返回。
組2,id 3有一個與另一個記錄的ID不匹配的存活。與此同時,第二個存儲區域爲空。這是我們需要返回的。
第3組都有一個非空的存活。這些都不需要。
編輯2:我終於想出了這個查詢:
SELECT cluster_id, oidmu, survoid
FROM MY_TABLE t3
WHERE t3.GROUP_id IN (
SELECT t1.GROUP_id
FROM MY_TABLE t1, MY_TABLE t2
WHERE t1.ID <> t2.ID
AND t1.GROUP_id = t2.GROUP_id
AND (t1.ID <> t2.SURV and t1.SURV is null)
);
你能編輯你的問題,並提供樣本數據和所需的結果? –
@Gordon Linoff原文已更新。 – user7002207