Oracle

如何從列表中檢索 id 的缺失值?

  • December 11, 2020

在 Oracle sql 的表內有一個值/標記的資料結構假設我有這個結構

表格

例如,我想為我擁有的值列表檢索缺失的標籤

$$ 1,2,3,4,5 $$ 在這種情況下,如果我尋找(1,2),我會尋找這個作為輸出

一直在嘗試使用臨時表和連接,但我仍然缺少一些東西,因為當我嘗試加入時,我要麼什麼都沒有,要麼只得到確實存在的那些,我實現了我想要一個使用減號的 id

從表中選擇 column_value 作為 COL_NAME (sys.dbms_debug_vc2coll(‘1’, ‘2’, ‘3’, ‘4’, ‘5’)) 減去 SELECT TAG FROM exTable WHERE ID=‘1’;

但是對於 IDS 列表,我沒有運氣

如果我重複這個問題,請告訴我

一種方法是在您的標籤和現有 id:s 之間創建笛卡爾積。從那裡您可以通過 MINUS 減去您現有的表,如您的範例中,或通過 EXISTS:

with d (tag, id) as (
   select tag, id 
   from table(sys.dbms_debug_vc2coll('1', '2', '3', '4', '5')) t 
   cross join ( 
       select distinct id from extable 
   )
) 
select * from d
where not exists (
   select 1 from extable x where x.id = d.id and x.tag = d.tag
);

我沒有完全按照您的範例進行操作,如果您可以稍微澄清一下它們可能會有所幫助,但是總的來說,聽起來您正在嘗試查找一個表中存在哪些數據而不是另一個表中存在哪些數據?如果是這樣,那麼您想使用一個LEFT JOIN和一個WHERE子句來過濾失去的記錄,如下所示:

SELECT *
FROM TableWithAllRecords
LEFT JOIN TableMissingRecords
   ON TableWithAllRecords.KeyField = TableMissingRecords.ForeignKeyField
WHERE TableMissingRecords.ForeignKeyField IS NULL

引用自:https://dba.stackexchange.com/questions/281376