我正在使用ORACLE數據庫。 編輯:從數據庫中查找缺席表的sql查詢
我想在列表中不存在唯一的表,而不是所有的數據庫這些表。
例:在我的數據庫下表是存在的:
a
b
c
d
e
r
s
我被賦予表的列表:
a
b
c
v
h
外面我想找出哪些表缺席(不存在)在我的數據庫中。
所以:a,b,c是存在於我的數據庫中的那些表。因此,排除這些表我的回答將是:
v and h
我的答案是沒有D,E,R,S
我怎麼能寫這樣的查詢,找出?
我正在使用ORACLE數據庫。 編輯:從數據庫中查找缺席表的sql查詢
我想在列表中不存在唯一的表,而不是所有的數據庫這些表。
例:在我的數據庫下表是存在的:
a
b
c
d
e
r
s
我被賦予表的列表:
a
b
c
v
h
外面我想找出哪些表缺席(不存在)在我的數據庫中。
所以:a,b,c是存在於我的數據庫中的那些表。因此,排除這些表我的回答將是:
v and h
我的答案是沒有D,E,R,S
我怎麼能寫這樣的查詢,找出?
您可以使用
SELECT a.table_name FROM (SELECT 'A' as table_name
FROM DUAL UNION
SELECT 'B' as table_name
FROM DUAL UNION
SELECT 'C' as table_name
FROM DUAL UNION
SELECT 'V' as table_name
FROM DUAL UNION
SELECT 'H' as table_name
FROM DUAL) a WHERE NOT EXISTS (
SELECT 1 FROM DBA_TABLES b where b.table_name=a.table_name)
WITH table_names AS (
SELECT 'A' AS tname FROM DUAL
UNION ALL
SELECT 'B' FROM DUAL
UNION ALL
SELECT 'C' FROM DUAL
UNION ALL
SELECT 'D' FROM DUAL
UNION ALL
SELECT 'E' FROM DUAL
)
SELECT tn.tname
FROM table_name tn
WHERE NOT EXISTS (SELECT 1
FROM all_tables at
WHERE tn.tname = at.table_name);
的WITH部分只是寫一個派生表(「內嵌視圖」)的不同(重複使用)的方式。
好的,但我沒有得到'WITH table_names AS(',我應該從哪裏開始? – saroj
這就是所有的,從WITH到結束的所有元素之前SELECT包含一個「CTE」,它是查詢的其餘部分可以引用的虛擬表。 –
@saroj:它只是在那裏建立「上即時」的表。你也可以把它放到子選擇中。 –
我會用減號來(以下摘要)做到這一點:
select table_name from table_list
minus
select table_name from db_tables
;
更充分:
with table_list as
( select 'A' table_name from dual
union select 'B' table_name from dual
union select 'C' table_name from dual
union select 'V' table_name from dual
union select 'H' table_name from dual
)
, db_tables as
( select 'A' table_name from dual
union select 'B' table_name from dual
union select 'C' table_name from dual
union select 'D' table_name from dual
union select 'E' table_name from dual
union select 'R' table_name from dual
union select 'S' table_name from dual
)
select table_name from table_list
minus
select table_name from db_tables
;
您可以使用該表和sys.dbms_debug_vc2coll創建一個virtua l列表中的列。
下應該做的伎倆:
SELECT
column_value AS missing_table_names
FROM
TABLE(SYS.DBMS_DEBUG_VC2COLL('a','b','c','v','h'))
WHERE
column_value NOT IN (
SELECT
table_name
FROM
ALL_TABLES
);
你可以在Oracle – Maddy