2016-04-07 16 views
0

opsiyonel örtüşme, bir şey gibi benim bilgime. Herhangi bir zaman türetilmiş bir tablo kullandım, bir hata atar, bu yüzden benim ilgi alanım gibi bu senaryolar gibi senaryolara rastlamak. İntweb'lerde bunu açıklayacak hiçbir şey bulamadım, umarım birileri türetilmiş tabloların takma adının isteğe bağlı olduğu ve olmadığı durumlarda senaryoları açıklayabilir.Oracle sql türetilmiş tablo bir müşterinin sorgusu dün geldi

+0

Aliasing gerekli değildir. Bununla birlikte, buna başvurmanız gerekiyorsa gereklidir. – mathguy

+1

Bu işe yarayacak. Aliasing isteğe bağlıdır, ancak önerilir. Göndermiş olduğunuz kodda gerçekten gerekli değildir, ancak satır içi görünümün dışında tabloların kullanılması önerilir; böylece birleştirmeler kullanılabilir ve sütun adlarının ortak veya belirsiz olması durumunda zorunludur. –

+1

Bu, platformdan platforma farklılık gösterir. Oracle alt seçimlerinde (türetilmiş tablolar), bir takma ad olarak adlandırmanız gerekmez (aslında buna _correlation name_ denir). Onları her zaman en iyi uygulama olarak kullanırım. "Korelasyon adı" için – mustaccio

cevap

1

Benzersiz olarak tanımlanmamış bir sütuna başvurduğunuzda, yalnızca takma adlara ihtiyacınız vardır. Bu, sütunun birden fazla tablo/türetilmiş tabloda var olduğu anlamına gelir. Bir referans, select ifadesinde veya bir birleştirmede olabilir. Tüm sütunlar benzersiz ise, bir takma ada sahip olmanıza gerek yoktur.

Netlik sağlamak için her zaman takma adı kullanmayı tercih ediyorum ve bu nedenle PL/SQL'deki Intellisense ile yardımcı oluyor.

--ALIAS needed, because the 'a' column referenced is not unique 
--this will throw an error 
select a, a, b, c 
    from (select 'A1' as a, 'B1' as b, 'C1' as c from dual), 
     (select 'A2' as a from dual); 
--this will not throw an error 
select t1.a, t2.a, b,c 
    from (select 'A1' as a, 'B1' as b, 'C1' as c from dual) t1, 
     (select 'A2' as a from dual) t2; 
; 

--ALIAS not needed for join, because all referenced columns are unique 
select a, b, c, d, e, f 
    from (select 'A' as a, 'B' as b, 'C' as c from dual) 
    join (select 'D' as d, 'E' as e, 'F' as f from dual) 
    on a = d; 

--ALIAS needed for join, because the 'x' column referenced is not unique 
--this will throw an error 
select a 
    from (select 'A' as a, 'B' as b, 'C' as c, 'X' as x from dual) 
    join (select 'D' as d, 'E' as e, 'F' as f, 'X' as x from dual) 
    on x = x; 
--this will not throw an error 
select a 
    from (select 'A' as a, 'B' as b, 'C' as c, 'X' as x from dual) t1 
    join (select 'D' as d, 'E' as e, 'F' as f, 'X' as x from dual) t2 
    on t1.x = t2.x; 
1

Bu örnekte, alt sorgunuzdaki tüm sütunları seçiyorsunuz ve dolayısıyla alt sorgu, takma ad olmadan yazılmıştır.

Bu alt sorguya başka bir tablo veya başka bir alt sorgu ile katılacaksanız, takma ad sütunlarını tanımlı takma adı kullanarak referans gösterebilmeniz için takma ad vermek istersiniz.