第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在where子句中使用“ case expression column”

在where子句中使用“ case expression column”

有只小跳蛙 2019-12-03 16:20:04
SELECT ename  ,    job  ,    CASE deptno         WHEN 10           THEN 'ACCOUNTS'         WHEN 20           THEN 'SALES'         ELSE 'UNKNOWN'       END AS departmentFROM emp /* !!! */ WHERE department = 'SALES'這將失?。篛RA-00904:“%s:無效的標(biāo)識符”有沒有一種方法可以克服Oracle 10.2 SQL中的此限制?如何在where子句中使用“ case expression column”?
查看完整描述

3 回答

?
Cats萌萌

TA貢獻1805條經(jīng)驗 獲得超9個贊

發(fā)生此錯誤的原因是,按照以下順序?qū)QL SELECT語句進行了邏輯 *處理:


FROM:選擇一個表或多個已聯(lián)接的表以及符合ON條件的所有行組合。


WHERE:評估條件,并刪除不匹配的行。


GROUP BY:將行分組(每組合為一行)


HAVING:評估條件,并刪除不匹配的行。


SELECT:評估列列表。


DISTINCT:刪除重復(fù)的行(如果它是SELECT DISTINCT語句)


UNION,EXCEPT,INTERSECT:那個操作的動作是在子SELECT語句的行拍攝。例如,如果它是UNION,則在評估所有子SELECT語句之后,將收集所有行(除非是UNION ALL,否則將刪除所有重復(fù)行)。因此,對于EXCEPT或INTERSECT情況。


ORDER BY:行是有序的。


因此,您不能使用in WHERE子句(尚未填充或計算的東西)。另請參見以下問題:oracle-sql-clause-evaluation-order


* 邏輯處理: 請注意,數(shù)據(jù)庫引擎還可以為查詢選擇其他評估順序(這就是它們通常要做的?。Nㄒ坏南拗剖墙Y(jié)果應(yīng)與使用上述順序相同。


解決方案是將查詢括在另一個查詢中:


SELECT *

FROM

  ( SELECT ename

         , job

         , CASE deptno

             WHEN 10 THEN 'ACCOUNTS'

             WHEN 20 THEN 'SALES'

                     ELSE 'UNKNOWN'

           END AS department

    FROM emp

  ) tmp

WHERE department = 'SALES' ;

或在WHERE條件下重復(fù)計算:


SELECT ename

     , job

     , CASE deptno

         WHEN 10 THEN 'ACCOUNTS'

         WHEN 20 THEN 'SALES'

                 ELSE 'UNKNOWN'

       END AS department

FROM emp

WHERE

    CASE deptno

      WHEN 10 THEN 'ACCOUNTS'

      WHEN 20 THEN 'SALES'

              ELSE 'UNKNOWN'

    END = 'SALES' ;

我想這是查詢的簡化版本,或者您可以使用:


SELECT ename

     , job

     , 'SALES' AS department

FROM emp

WHERE deptno = 20 ;


查看完整回答
反對 回復(fù) 2019-12-03
?
Qyouu

TA貢獻1786條經(jīng)驗 獲得超11個贊

您的表不包含“部門”列,因此您不能在where子句中引用它。請改用deptno。


SELECT ename

,      job

,      CASE deptno

          WHEN 10

          THEN 'ACCOUNTS'

          WHEN 20

          THEN 'SALES'

          ELSE 'UNKNOWN'

       END AS department

FROM   emp /* !!! */ where deptno = 20;


查看完整回答
反對 回復(fù) 2019-12-03
?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

select emp_.*

from (SELECT ename

  ,    job

  ,    CASE deptno

         WHEN 10

           THEN 'ACCOUNTS'

         WHEN 20

           THEN 'SALES'

         ELSE 'UNKNOWN'

       END AS department

FROM emp /* !!! */ ) emp_ where emp_.department='UNKNOWN';


查看完整回答
反對 回復(fù) 2019-12-03
  • 3 回答
  • 0 關(guān)注
  • 701 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號