2012-11-17 58 views
1

我想我的結果是這個樣子在結果邊加入柱側集

FirstName1  LastName1   FirstName2  LastName2 
     Amy   Smith    Bob   Stone 
     Fred   Joker    Gina   White 

凡FIRSTNAME1和FIRSTNAME2具有相同的數據類型,但沒有什麼我可以用它來連接(假設沒有人有相同的名字),LastName1和LastName2也是如此。
我試圖創建2個表。第一個表包含FirstName1和LastName1。第二個表包含Firstname2和LastName2。
然後我用

SELECT table1.FirstName1, table1.LastName1, table2.FirstName2, table2.LastName2 
FROM table1, table2; 

但是,這給了我很大的重複。有什麼建議麼?

+0

你到底想要歸檔什麼?如果你想加入兩張表,你需要處理一些信息。數據庫無法在您的腦海中讀取併爲您執行此操作。 – NLemay

+0

@NLemay,我想我真的只是想讓我的結果集看起來很漂亮。可以這樣做嗎?我唯一發現的共同點是所有4個字段的最大行數是10.我可以加入行號嗎? – Dino55

+0

謝謝你添加的例子。但爲什麼「艾米史密斯」與「鮑勃斯通」和「弗雷德小丑」與「吉娜白」?你希望table1的第一個table2,然後第二個table1的第二個table2? – NLemay

回答

3
SELECT t1.FirstName1, t1.LastName1, t2.FirstName2, t2.LastName2 
FROM 
    (SELECT 
     FirstName1, 
     LastName1, 
     ROW_NUMBER() OVER (ORDER BY FirstName1) 'RowNumber' 
    FROM table1 
    ) AS t1 
    FULL OUTER JOIN 
    (SELECT 
     FirstName2, 
     LastName2, 
     ROW_NUMBER() OVER (ORDER BY FirstName2) 'RowNumber' 
    FROM table2 
    ) AS t2 
    ON t1.RowNumber = t2.RowNumber 

FULL OUTER JOIN將處理其中來自這兩個表的行數是不一樣的情況。

+0

感謝您的幫助! 但是我在ROW_NUMBER()出現錯誤。它說** ORA-00923:FROM關鍵字找不到預期的地方** – Dino55

+0

您使用的是什麼版本的oracle? 'ROW_NUMBER()'函數的用法可以在這裏找到:http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm,順便說一句。 – Vikdor

+0

我正在使用Oracle Database 11g企業版版本11.1.0.6.0 – Dino55

0

你永遠不應該這樣做你想要做什麼,而是嘗試使用DISTINCT

SELECT Distinct 
    table1.FirstName1, 
    table1.LastName1, 
    table2.FirstName2, 
    table2.LastName2 
FROM table1, table2; 

的問題,你的做法是檢索到的數據集沒有任何意義。無論如何,你爲什麼要這樣做?

編輯:你總是可以做到這一點做到這一點:

select table1.FirstName1, table1.LastName1, table2.FirstName2, table2.LastName2 
from table1, table2 
where table1.rownum= table2.rownum; 
+0

感謝您的幫助!不幸的是,仍然給我重複的行.... – Dino55

+0

@ Dino55,你可以顯示示例數據。你想要的結果是什麼? – RAS

+0

我編輯了我的問題。這有幫助嗎? – Dino55

0

「哦,哈哈,我真的只是想使它看起來很漂亮。我習慣 編程C和Java中所有類型的輸出是相當 可能的。」

數據庫編程不同。在這個領域內容比單純可愛更重要。因此,當涉及到結果集時,數據庫堅持一行中的所有列共享一個有意義的關係(線索在名稱,關係數據庫中)。

你的問題是,你沒有沒有共同鍵的表,因此沒有辦法將兩組行連接在一起。如果沒有適當的WHERE子句,數據庫會實現交叉連接,即笛卡爾積,這就是所有重複來自的地方。

鑑於您沒有有意義的按鍵,您唯一的選擇就是僞造它們; the approach shown by Vikdor是實現這一目標的一種方法。