2014-03-26 23 views
0

我得到t.ev_no一個Oracle無效的標識符錯誤我內心的查詢甲骨文無效的標識符錯誤

首先在where子句中,讓我解釋一下我的表結構和查詢的目的。我有一個具有以下列

  1. ev_no
  2. ev_name
  3. ev_address1
  4. ev_address2
  5. ev_address3
  6. ev_city
  7. ev_state
  8. ev_zip
  9. payment_addre的表名爲供應商SS
  10. ev_mwbe

我顯示在一個gridview這一信息,但該地址是其由地址1,地址,地址3,城市,州和拉鍊上每個單獨的線的單個列。如果任何這些列都是NULL,那麼我必須跳過換行符。因此,內部查詢與案件,照顧這一點。

問題在於,oracle無法識別內部查詢的where子句中的t.ev_no。我的查詢如下

select t.ev_no, 
     t.ev_type, 
     t.ev_name, 
     (select ADD1 || ADD2 || ADD3 || CITY || STATE || ZIP 
      from (select CASE 
         WHEN ev_address1 is NULL then 
          '' 
         ELSE 
          ev_address1 || '<br>' 
         END AS "ADD1", 
         CASE 
         WHEN ev_address2 is NULL then 
          '' 
         ELSE 
          ev_address2 || '<br>' 
         END AS "ADD2", 
         CASE 
         WHEN ev_address3 is NULL then 
          '' 
         ELSE 
          ev_address3 || '<br>' 
         END AS "ADD3", 
         CASE 
         WHEN ev_city is NULL then 
          '' 
         ELSE 
          ev_city || '<br>' 
         END AS "CITY", 
         CASE 
         WHEN ev_state is NULL then 
          '' 
         ELSE 
          ev_state || '<br>' 
         END AS "STATE", 
         CASE 
         WHEN ev_zip is NULL then 
          '' 
         ELSE 
          ev_zip || '<br>' 
         END AS "ZIP" 
         from vendor where ev_no = t.ev_no)) as "ADDRESS", 
     t.ev_state, 
     t.ev_city, 
     t.payment_address, 
     t.ev_mwbe 
    from vendor t 
where UPPER(ev_city) like :city 
order by t.ev_state, t.ev_city, t.ev_name 

請讓我知道如何糾正錯誤。

感謝

回答

2

不記得確切的問題,但在Oracle中有你能走多遠內部嵌套查詢中使用別名的限制。要解決此問題,您可以使用WITH子句重寫。

WITH addressquery 
    AS (SELECT ev_no, 
       CASE 
        WHEN ev_address1 IS NULL THEN '' 
        ELSE ev_address1 
         || '<br>' 
       END AS "ADD1", 
       CASE 
        WHEN ev_address2 IS NULL THEN '' 
        ELSE ev_address2 
         || '<br>' 
       END AS "ADD2", 
       CASE 
        WHEN ev_address3 IS NULL THEN '' 
        ELSE ev_address3 
         || '<br>' 
       END AS "ADD3", 
       CASE 
        WHEN ev_city IS NULL THEN '' 
        ELSE ev_city 
         || '<br>' 
       END AS "CITY", 
       CASE 
        WHEN ev_state IS NULL THEN '' 
        ELSE ev_state 
         || '<br>' 
       END AS "STATE", 
       CASE 
        WHEN ev_zip IS NULL THEN '' 
        ELSE ev_zip 
         || '<br>' 
       END AS "ZIP" 
     FROM vendor) 
SELECT t.ev_no, 
     t.ev_type, 
     t.ev_name, 
     a.add1 || a.add2 || a.add3 || a.city || a.state || a.zip AS "ADDRESS", 
     t.ev_state, 
     t.ev_city, 
     t.payment_address, 
     t.ev_mwbe 
FROM vendor t 
     join addressquery a 
     ON t.ev_no = a.ev_no 
WHERE 1 = 1 
     AND Upper(ev_city) LIKE :city 
ORDER BY t.ev_state, 
      t.ev_city, 
      t.ev_name 
+0

謝謝。你的查詢比我的可讀性好得多。我喜歡。唯一的問題是你的連接部分中由於'AS'導致「Missing Keyword」錯誤,即「加入地址查詢AS a」。如果我擺脫它然後它工作正常。感謝解決方案 –

+0

@Coder是我的[tag:sql-server]習慣,把'AS' keaword – 2014-03-26 16:54:14

0

所以我發現查詢嵌套是導致這個問題。儘管查詢的可讀性受到重大影響,但下面的查詢仍然成功。

select t.ev_no, 
     t.ev_type, 
     t.ev_name, 
     (select CASE 
       WHEN ev_address1 is NULL then 
        '' 
       ELSE 
        ev_address1 || '<br>' 
       END || CASE 
       WHEN ev_address2 is NULL then 
        '' 
       ELSE 
        ev_address2 || '<br>' 
       END || CASE 
       WHEN ev_address3 is NULL then 
        '' 
       ELSE 
        ev_address3 || '<br>' 
       END || CASE 
       WHEN ev_city is NULL then 
        '' 
       ELSE 
        ev_city || '<br>' 
       END || CASE 
       WHEN ev_state is NULL then 
        '' 
       ELSE 
        ev_state || '<br>' 
       END || CASE 
       WHEN ev_zip is NULL then 
        '' 
       ELSE 
        ev_zip || '<br>' 
       END 
      from LMS_APPL.tlsev_external_vendor 
     where ev_no = t.ev_no) as "ADDRESS", 
     t.ev_state, 
     t.ev_city, 
     t.payment_address, 
     t.ev_mwbe 
    from vendor t 
where UPPER(ev_city) like :city 
order by t.ev_state, t.ev_city, t.ev_name