我有一個存盤 EVENT_NUMBER 及其 EVENT_TYPE_CODE(s) 的表。就像是:
| EVENT_NUMBER | EVENT_ITEM_CODE |
|---|---|
| 400001 | 米 |
| 400002 | 米 |
| 400002 | 小號 |
| 400003 | 噸 |
| 400004 | 大號 |
| 400004 | 小號 |
| 400004 | 米 |
| 400005 | 大號 |
| 400005 | 噸 |
| 400006 | 小號 |
| 400006 | 米 |
| 400006 | 大號 |
| 400006 | 噸 |
資料從表單填充到表中。對于每個事件,用戶將從專案串列中進行選擇。當資料被填充到表中時,它在一行中被規范化。因此,例如,對于事件 400001,用戶輸入了一種代碼 (M)。當用戶為事件 400002 輸入資料時,他們選擇了 M 和 S。
我想查詢這個表,以便如果事件曾經有一個 M 進入它,我想從結果中洗掉事件編號。例如,我們將完全洗掉事件#400004 的所有行,因為該事件的至少一行甚至有一個“M”。
我一直在努力解決這個問題,而且很可能在這個階段過度思考它。我嘗試了一些方法,例如通過 LISTAGG 編譯串列,然后在串列中搜索“M”,然后洗掉該行,但是,考慮到我正在創建的更大查詢,我覺得這不是一種足夠有效的方法。
我很感激任何建議。
uj5u.com熱心網友回復:
您可以在此處使用帶有存在邏輯的洗掉:
DELETE
FROM events e1
WHERE EXISTS (
SELECT 1
FROM events e2
WHERE e2.EVENT_NUMBER = e1.EVENT_NUMBER AND
e2.EVENT_ITEM_CODE = 'M'
);
編輯:如果您想以這種方式查看表格,請使用:
SELECT e1.*
FROM events e1
WHERE NOT EXISTS (
SELECT 1
FROM events e2
WHERE e2.EVENT_NUMBER = e1.EVENT_NUMBER AND
e2.EVENT_ITEM_CODE = 'M'
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/481643.html
