2017-09-19 51 views
1

下面的SQL工作更大:SQL的絕對值超過一定值

select 
    column1 
from 
    table1 
where 
    column1 > 10 

下列不:

select 
    abs(column1 - column2) column_diff 
from 
    table1 
where 
    column_diff > 10 

爲什麼?我應該如何解決它?我想說的是'給我所有行的絕對值大於10的兩列的差異'。謝謝。

+2

使用子查詢CTE,或將表達式放在where子句中。這就是SQL的工作原理。 –

+3

[引用WHERE子句中的列別名]的可能副本(https://stackoverflow.com/questions/8370114/referring-to-a-column-alias-in-a-where-clause) –

回答

1

您的查詢將不能工作,因爲SQL引擎將在下面的步驟編譯查詢:

  1. from條款
  2. where條款

  3. select條款

所以,同時執行where子句,別名column_diff將不可用,因此查詢將不起作用。

解決方案:

select 
    abs(column1 - column2) as column_diff 
     from 
      table1 
       where 
       abs(column1-column2) >10; 

希望它能幫助!