簡體   English   中英

select語句中的錯誤,在子查詢中具有並集

[英]Error in select statement, with union all in a subquery

在Oracle 11g中,我遇到了一個查詢錯誤,並且無法弄清它為什么對我造成錯誤。 這是查詢:

select
  main_data.issue_number,
  main_data.transaction_number
 from
 (
    select
      p1.payment_date,
      p1.media_number,
      p1.payment_amount,
      p1.issue_number, 
      p1.advice_na_number,
      name.name_address_line_1,
      name.name_address_line_2,
      name.name_address_line_3,
      name.name_address_line_4,
      name.name_address_line_5,
      name.name_address_line_6,
      name.name_address_line_7,
      name.name_address_city, 
      name.state_code,
      name.address_country_code, 
      name.zip_code, 
      name.tax_id_number,
      p1.output_tx_number_prin,
      p1.output_tx_number_int,
      '' as "transaction_number",
      p1header.check_account_number

    from 
    p1
    left join name on p1.name_address_number = name.name_address_number
    left join p1header on p1.issue_number = p1header.issue_number

  UNION ALL

  select 
      check.date_of_payment,
      check.media_number, 
      check.payment_amount,
      check.issue_number,
      check.payee_na_number,
      name.name_address_line_1,
      name.name_address_line_2,
      name.name_address_line_3,
      name.name_address_line_4,
      name.name_address_line_5,
      name.name_address_line_6,
      name.name_address_line_7,
      name.name_address_city, 
      name.state_code,
      name.address_country_code, 
      name.zip_code, 
      name.tax_id_number,
      '' as "output_tx_number_prin",
      '' as "output_tx_number_int",
      check.transaction_number,
      check.dda_number as "check_account_number"
  from check
  left join name on check.payee_na_number = name.name_address_number
) main_data

選擇上面的單個字段會給我一個“無效的標識符錯誤”。 如果我select *那么它將無錯誤地返回給我數據。 我在這里做錯了什么? 謝謝。

舊的帶引號的標識符問題...請參見數據庫對象命名文檔中的第9點,並請注意Oracle不建議使用帶引號的標識符。

您已將列別名放在雙引號中以小寫形式表示。 這意味着對它的任何引用也必須被引用並且完全匹配大小寫。 所以這可以工作:

select
  main_data.issue_number,
  main_data."transaction_number"
from
...

但是除非您迫切需要具有這樣的別名-並且我懷疑您會這樣做,因為實際表列中的所有標識符名稱都沒有加引號-從內部選擇中刪除雙引號會更簡單:

select
  main_data.issue_number,
  main_data.transaction_number
 from
 (
    select
  ...
      '' as transaction_number,
      p1header.check_account_number
  ...
  UNION ALL
  select 
    ...
      '' as output_tx_number_prin,
      '' as output_tx_number_int,
      check.transaction_number,
      check.dda_number as check_account_number
    ...

您實際上不需要為聯合的第二個分支中的列添加別名。 列標識符將全部取自第一個分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM