所以,可以說,我有這樣的使用where子句中select子句的列號。提取allias原名
SELECT a as d,b,c FROM myTable
WHERE a=1;
查詢是否有可能代替 A = 1鍵入類似SELECTED.1 = 1或以某種方式提取allias因爲d原來的名字= 1不起作用
所以,可以說,我有這樣的使用where子句中select子句的列號。提取allias原名
SELECT a as d,b,c FROM myTable
WHERE a=1;
查詢是否有可能代替 A = 1鍵入類似SELECTED.1 = 1或以某種方式提取allias因爲d原來的名字= 1不起作用
由於關於WHERE子句何時進行評估的內部複雜性,因此無法做到這一點。但是如果你正在使用別名的東西是一個你不想重複的長表達式,那麼就有一個典型的解決方案。從https://forums.oracle.com/forums/thread.jspa?threadID=1107532:
標準的解決方案是,您將查詢到的直列 視圖(沒有where子句謂語),然後添加 where子句謂詞,使用別名,在外部查詢。
因此,像這樣:
select ... from (select ... here complex expression that is aliased ... from ... where) A where ... here condition that uses the A.alias column ...
在您的例子的情況下,這將是:
SELECT d, b, c
FROM (SELECT a AS d, b, c FROM myTable) AS myAliasedTable
WHERE d = 1
當然不過,這不會在你的文字例如是有意義的。如果你正在使用別名的東西只是一個列名,那麼只需在WHERE中使用實際的列名,在這種情況下沒有真正的缺點。
另請注意,如果確實使用此方法,則應該儘可能多地在WHERE子句中添加內部查詢(即不引用別名列的部分)以限制結果的大小別名錶。例如,如果你也想在你的例子來測試b
,這將是:
SELECT d, b, c
FROM (
SELECT a AS d, b, c
FROM myTable
WHERE b = 1
) AS myAliasedTable
WHERE d = 1
使用common table expression (CTE)例如
WITH T
AS
(
SELECT a as d, b, c
FROM myTable
)
SELECT *
FROM T
WHERE d = 1;
爲什麼要這麼做? – 2012-03-26 03:09:30
@JohnSaunders,因爲也許別名是一個複雜的表達式,你不想在where子句中重複。 – 2012-03-26 03:14:56