![](/img/trans.png)
[英]SQL: Is UNION the same as SELECT DISTINCT with UNION ALL subquery
[英]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.