Oracle-11g-R2
如何避免特定條件下的重複記錄
標題##我有一個表格,其中包含如下數據
+----+--------+-----------+----------------+ | id | name | testfield | status | +----+--------+-----------+----------------+ | 1 | raju | 11 | import | | 1 | raju | 11 | ticket | | 2 | ravi | 22 | import | | 2 | ravi | 33 | ticket | | 3 | ramesh | 44 | import | | 3 | ramesh | 44 | ticket | | 4 | rahul | 55 | import | | 5 | rudra | 66 | import | +----+--------+-----------+----------------+
現在我想要如下輸出
+----+--------+-----------+----------------+ | id | name | testfield | status | +----+--------+-----------+----------------+ | 1 | raju | 11 | ticket | | 2 | ravi | 33 | ticket | | 3 | ramesh | 44 | ticket | | 4 | rahul | 55 | import | | 5 | rudra | 66 | import | +----+--------+-----------+----------------+
解釋:如果我有一行(id,name)對的狀態“票”,應該選擇這一行。如果我有一行狀態為“導入”的(id,name)對,但沒有狀態為“ticket”的行,則應選擇該行。
例如,行 id 1,2 和 3 的狀態為“ticket”,因此應該顯示它們。id 為 4 和 5 的行沒有對應的“ticket”行(具有相同的 (id,name) 值),因此應該顯示“import”。
基於集合操作的可能解決方案。據我了解,您必須在狀態欄位中顯示所有包含“票證”的行,並在狀態欄位中顯示所有帶有“導入”的行,而在狀態欄位中沒有類似的帶有“票證”的行。
選擇 ID、名稱、測試欄位、狀態 來自我的表 其中狀態='票' 聯盟 選擇 ID、名稱、測試欄位、狀態 從 mytable 哪裡 (id,name) 在 ((選擇ID,名稱 來自我的表 其中狀態='導入' ) 減 (選擇身份證,姓名 來自我的表 其中狀態='票' )) ;
但是sqlfiddle不喜歡它。它說
哎呀!有些不對勁。再試一次
$$ … $$