[英]Oracle 11g SQL to get unique values in one column of a multi-column query
[英]Is there a non-ugly way to use a multi-column, multi-row table literal in an Oracle 11g query?
我正在嘗試使用“文字”多列表與Oracle 11g進行連接查詢。
基於這個答案 ,這是我提出的最好的( 這個答案表明一個更好的語法,但它只適用於單列表,據我所知):
SELECT * from
(
-- The ugly... it burns...
select 'APPLE' as n, 'FRUIT' as m from dual
union all select 'CARROT' as n, 'VEGGIE' as m from dual
union all select 'PEACH' as n, 'FRUIT' as m from dual
union all select 'CUCUMBER' as n, 'VEGGIE' as m from dual
union all select 'ORANGE' as n, 'FRUIT' as m from dual
)
在Oracle中創建多行,多列文字表是否有一種不那么難看的方式? 不幸的是,我無法創建臨時表。
<rant>
正如我所預料的那樣,PostgreSQL 對於文字表有一個很好的,理智的語法 ,但Oracle是一團糟。 </rant>
編輯:我已經嘗試了@Mark Chesney建議的行值構造函數語法 ,但這也不起作用: select n,m from dual where (n,m) in (...)
double select n,m from dual where (n,m) in (...)
給我一個無效的標識符錯誤。
對於兩列,您可以使用ODCIObjectList:
select objectschema m, objectname n
from table(sys.ODCIObjectList(
sys.odciobject('APPLE', 'FRUIT'),
sys.odciobject('CARROT', 'VEGGIE'),
sys.odciobject('PEACH', 'FRUIT'),
sys.odciobject('CUCUMBER', 'VEGGIE'),
sys.odciobject('ORANGE', 'FRUIT')));
M N
---------- ----------
APPLE FRUIT
CARROT VEGGIE
PEACH FRUIT
CUCUMBER VEGGIE
ORANGE FRUIT
對於更多列,您可以定義自己的類型:
create type t as object (a varchar2(10), b varchar2(10), c number);
create type tt as table of t;
select * from table( tt (
t('APPLE', 'FRUIT', 1),
t('APPLE', 'FRUIT', 1122),
t('CARROT', 'VEGGIE', 3),
t('PEACH', 'FRUIT', 104),
t('CUCUMBER', 'VEGGIE', 5),
t('ORANGE', 'FRUIT', 6) ) )
A B C
---------- ---------- ----------
APPLE FRUIT 1
APPLE FRUIT 1122
CARROT VEGGIE 3
PEACH FRUIT 104
CUCUMBER VEGGIE 5
ORANGE FRUIT 6
對於許多列,您可以像這樣加入
SELECT a.v field1, b.v field2
FROM (SELECT column_value v, rownum r
FROM TABLE(sys.odcivarchar2list('abc', 'def', 'ghi'))) a
JOIN (SELECT column_value v, rownum r
FROM TABLE(sys.odcivarchar2list('abc', 'def', 'ghi'))) b ON a.r = b.r
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.