2013-06-21 63 views
1

我有四個表想要加入並一起顯示輸出。我不確定Oracle SQL Developer的語法是如何工作的。我知道對於程序員來說這是一個簡單的問題,我希望有人能夠就代碼的外觀提出建議。在Oracle SQL Developer中加入表格

是:

JNL1 
JNL2 
JNL3 
JNL4 

是共同之間的這些表的所有四是ItemID的關鍵。

查詢將如何?謝謝

+1

語法不是由工具(它是SQL Developer)而是由數據庫系統(它是Oracle)確定的。查看關於如何編寫連接的Oracle手冊:http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries006.htm#i2054012 –

回答

4

這實際上取決於你想要的連接類型(外部還是不是),但是你可以使用默認的SQL語法。

例如,接合而不JOIN關鍵字:

select * from JNL1, JNL2, JNL3, JNL4, 
where 
JNL1.ItemID = JNL2.ItemID AND 
JNL2.ItemID = JNL3.ItemID AND 
JNL3.ItemID = JNL4.ItemID; 

此外可以利用多個INNER JOINS例如的

SELECT whatever 
    FROM JNL1 AS a 
INNER 
    JOIN JNL2 AS b 
    ON b.ItemID = a.ItemID 
INNER 
    JOIN JNL2 AS c 
    ON c.ItemID = b.ItemID 
INNER 
    JOIN JNL2 AS d 
    ON d.ItemID = c.ItemID 
+1

謝謝,這個作品完美。 –

0

如果要輸出來自的所有表中的行,並且如果每個表中的列相同,則UNION ALL將起作用。請注意,這是不是在數據庫意義上的JOIN,雖然它種在一個英語語感:

SELECT * FROM JNL1 
UNION ALL SELECT * FROM JNL2 
UNION ALL SELECT * FROM JNL3 
UNION ALL SELECT * FROM JNL4 

如果需要,您可以添加一個ORDER BY到底。

UNIONUNION ALL類似,但它將省略所有值都重複的行。

+0

當我運行該命令時,它給了我這個錯誤:所有查詢使用UNION,INTERSECT或EXCEPT運算符組合在目標列表中必須具有相同數量的表達式 –

+0

好的,這基本上意味着我誤解了您的問題。我認爲你可能意思是「加入」的意思是「追加」 - 我猜測是因爲沒有表定義,我猜錯了:)其他答案使用實際的數據庫連接,所以他們可能是你想要的。 –

2

在Oracle工作,它會在其他數據庫引擎:

SELECT * 
FROM JNL1 j1 
INNER JOIN JNL2 j2 ON j1.ItemID = j2.ItemID 
INNER JOIN JNL3 j3 ON j1.ItemID = j3.ItemID 
INNER JOIN JNL4 j4 ON j1.ItemID = j4.ItemID 

一個典型的Oracle存在語法錯誤,當你想LEFT JOIN

標準SQL:

SELECT * 
FROM JNL1 j1 
LEFT JOIN JNL2 j2 ON j1.ItemID = j2.ItemID 
LEFT JOIN JNL3 j3 ON j1.ItemID = j3.ItemID 
LEFT JOIN JNL4 j4 ON j1.ItemID = j4.ItemID 

等效於此Oracle語法:

SELECT * 
FROM JNL1 j1, 
JNL2 j2, 
JNL3 j3, 
JNL4 j4, 
WHERE j1.ItemID=j2.ItemID(+) 
AND j1.ItemID=j3.ItemID(+) 
AND j1.ItemID=j4.ItemID(+)