我有一些結構相同的表格,我想在它們的一組中進行選擇。是否可以從多個表中進行選擇,並將其名稱作爲子查詢的結果?
而不是僅僅對所有這些表進行循環,我想在主查詢的FROM之後放置一個子查詢。
它有可能會失敗嗎?
謝謝!
(使用Oracle)
附加信息:我沒有表的名稱權了!它們存儲在另一個表中。是否有可能在我的主要查詢的FROM之後放置子查詢?
我有一些結構相同的表格,我想在它們的一組中進行選擇。是否可以從多個表中進行選擇,並將其名稱作爲子查詢的結果?
而不是僅僅對所有這些表進行循環,我想在主查詢的FROM之後放置一個子查詢。
它有可能會失敗嗎?
謝謝!
(使用Oracle)
附加信息:我沒有表的名稱權了!它們存儲在另一個表中。是否有可能在我的主要查詢的FROM之後放置子查詢?
「我沒有表 的姓名權了!他們存儲在另一個 表」
甲骨文不會做這樣的事情在SQL。您需要使用PL/SQL並組裝一個動態查詢。
create or replace function get_dynamic_rows
return sys_refcursor
is
stmt varchar2(32767) := null;
return_value sys_refcursor;
begin
for r in (select table_name from your_table)
loop
if stmt is not null then
stmt := stmt||' union all ';
end if;
stmt := stmt||'select * from '||r.table_name;
end loop;
open return_value for stmt;
return return_value;
end;
/
這將組裝的查詢這樣
select * from table_1 union all select * from table_2
的UNION ALL是一組操作者,結合多個查詢的輸出在一個單一的結果,而不刪除重複設置。每個查詢中的列必須匹配數字和數據類型。
因爲生成的語句會自動執行,所以在格式化時沒有真正的值(除非查詢的實際位比較複雜,您可能需要調試它)。
Ref遊標是與JDBC或.Net ResultSets等效的PL/SQL構造。 Find out more。
當然,只是工會在一起:
select * from TableA
union all
select * from TableB
union all
select * from TableC
你可以在一個子查詢工會:
使用union
,如果你只在唯一行感興趣,union all
如果你希望所有包括重複的行。
是的,但我沒有馬上就有名字! 它們存儲在另一個表中。是否有可能在我的主要查詢的FROM之後放置子查詢? – Acibi 2010-06-30 11:53:31
如果表名在另一個表中,這意味着您需要執行動態SQL並且不能創建某種子查詢。最好的辦法是有兩個查詢,一個查詢表名,另一個查詢上面的聯合。 – 2010-06-30 11:57:15
存儲在模型中的數據字典信息(例如表名)的設計可能是錯誤的。無論如何,動態SQL將是唯一的出路。 – 2010-07-01 12:21:21