因爲您在頂部做了select *
。
user_id
firstname
lastname
DEPARTMENT
同時存在於子查詢,並與select *
它會得到兩列具有相同的名稱。
如果要合併的兩個子查詢(使得所產生的列集將user_id, firstname, lastname, DEPARTMENT, jc_name, ug_name
),你應該做一個natural join:
SELECT *
FROM (SELECT aods.user_id, aods.firstname, aods.lastname, aods.department,
cods.jc_name
FROM personas aods LEFT JOIN user_jc cods
ON aods.user_id = cods.user_id
WHERE cods.jc_name LIKE '%ADM%') ods
NATURAL JOIN
(SELECT abl.user_id, abl.firstname, abl.lastname, abl.department,
bbl.ug_name
FROM personas abl LEFT JOIN ru_ug bbl ON abl.user_id = bbl.user_id
WHERE bbl.ug_name LIKE '%ADM%' AND bbl.rss_name = 'TIR') bl
相反,如果你希望所有的不同列時,應明確列出其中:
SELECT ods.user_id, ods.firstname, ods.lastname, ods.department, ods.jc_name,
bl.user_id, bl.firstname, bl.lastname, bl.department, bl.ug_name
FROM (SELECT aods.user_id, aods.firstname, aods.lastname, aods.department,
cods.jc_name
FROM personas aods LEFT JOIN user_jc cods
ON aods.user_id = cods.user_id
WHERE cods.jc_name LIKE '%ADM%') ods
FULL OUTER JOIN
(SELECT abl.user_id, abl.firstname, abl.lastname, abl.department,
bbl.ug_name
FROM personas abl LEFT JOIN ru_ug bbl ON abl.user_id = bbl.user_id
WHERE bbl.ug_name LIKE '%ADM%' AND bbl.rss_name = 'TIR') bl
ON ods.user_id = bl.user_id
在您的評論你說,你要對每列使用nvl()
與外連接。對我來說,它工作正常:
SELECT NVL (ods.user_id, bl.user_id), NVL (ods.firstname, bl.firstname),
NVL (ods.lastname, bl.lastname), NVL (ods.department, bl.department),
ods.jc_name, bl.ug_name
FROM (SELECT '1' user_id, 'ods2' firstname, NULL lastname,
'ods3' department, 'ods4' jc_name
FROM DUAL) ods
FULL OUTER JOIN
(SELECT '1' user_id, NULL firstname, 'bl2' lastname, 'bl3' department,
'bl4' ug_name
FROM DUAL) bl ON ods.user_id = bl.user_id
你做一些額外的東西,像order by
?
謝謝ramsesoriginal您的幫助。自然連接正常工作,但這不是我想要的。我在這裏格式化了一些問題。 全外部聯接給了我一次 「ORA-00918:含糊不清的列」 ' 選擇 \t NVL(ods.user_id,bl.user_id), NVL(ods.firstname,bl.firstname), NVL( ods.lastname,bl.lastname), NVL(ods.department,bl.department), ods.jc_name, bl.ug_name' – 2012-02-06 11:33:14
我編輯了答案 – ramsesoriginal 2012-02-06 11:47:37
我不能拿出更好的解釋,但是這個一個人不適合我。我從來沒有遇到過使用SELECT *處理重複列名的問題 - 它應該會自動替代其中的一個。也許它取決於正在使用的客戶端以及它如何處理查詢結果。作爲一個例子,'SELECT * FROM (從級別<= 10的雙重連接中選擇級別l)完全外部連接(從級別<= 15的雙重連接中選擇級別l)b在bl =我在SQL Developer和SQLPlus中。 – 2012-02-06 13:40:20