2012-03-26 18 views
7

Yani ben buSütun numarasını, yan tümcesindeki select yan tümcesinden kullanın. Ayıklanıyor allias orijinal adı

SELECT a as d,b,c FROM myTable 
    WHERE a=1; 

gibi bir sorgu yerine arasında mümkün mü var demek sağlayan bir = 1 SELECTED.1 gibi bir şey yazmak için = 1 ya da bir şekilde allias d beri orijinal adını ayıklamak için = 1 çalışmaz

+3

Bunu neden yapmak istersiniz? –

+1

@JohnSaunders, çünkü belki de takma adı verilen şey, nerede yan tümce içinde yinelenmek istemediğiniz karmaşık bir ifadedir. –

cevap

10

Bunu yapmak için WHERE yan tümcesinin değerlendirildiği iç karmaşıklıklar nedeniyle yapmak mümkün değildir. Ancak, taklit ettiğiniz şey tekrar etmemek istediğiniz uzun bir ifade ise, bunun tipik bir çözümü vardır. https://forums.oracle.com/forums/thread.jspa?threadID=1107532 Gönderen:

bu standart bir çözümdür, içeri, diğer adı kullanılarak (burada-fıkra dayanaksız) bir satır içi görünümüne sorgu taşımak ve sonra -fıkra koşulu ekle dış sorgu.

Yani böyle bir şey: senin örneğin durumda

select ... 
from (select ... here complex expression that is aliased ... 
     from ... 
     where) A 
where ... here condition that uses the A.alias column ... 

, olurdu:

SELECT d, b, c 
FROM (SELECT a AS d, b, c FROM myTable) AS myAliasedTable 
WHERE d = 1 

Ama tabii

, bu edebi örnekte anlamlı olmaz. Takma adınız yalnızca bir sütun adı ise, o zaman sadece WHERE'deki gerçek sütun adını kullanın, bu durumda gerçek bir dezavantaj yok.

Ayrıca, bu yöntemi kullanırsanız, sonuçta boyutunu sınırlamak için dahili sorguda (başka bir sütuna gönderme yapmayan parçalar anlamına gelir) olabildiğince WHERE yan tümcesini koymanız gerektiğini unutmayın. diğer tablo. ayrıca örnekte b üzerinde test etmek istiyorsa Örneğin, o olacaktır:

SELECT d, b, c 
FROM (
    SELECT a AS d, b, c 
    FROM myTable 
    WHERE b = 1 
) AS myAliasedTable 
WHERE d = 1