2012-07-26 75 views
0

我正在學習一些SQL,我想知道傳統的連接3個或更多表的方式是什麼。SQL - 連接3個或更多的表傳統方法

我知道使用NATURAL JOINs和JOIN ON。我想加入使用也是可能的嗎?但是我聽說有一種傳統的做法,但是我無法弄清楚。

我已經試過如下:

SELECT c#, fn, ln, cat 
FROM TABLE1, TABLE4 
WHERE (TABLE1.c# = TABLE2.c# 
AND TABLE3.o# = TABLE2.o# 
AND TABLE4.i = TABLE3.i); 

但我總是得到錯誤ORA-00904:無效的標識%S

有人關心幫助我,或點我在正確的方向?

感謝

+1

一些建議:不要使用NATURAL JOIN,除了可能用於一次性adhoc查詢。 – 2012-07-26 06:00:45

+0

謝謝,我知道。我需要這個作業。 – Pztar 2012-07-27 00:01:35

回答

4

在您的例子:

SELECT c#, fn, ln, cat 
FROM TABLE1, TABLE4 
WHERE (TABLE1.c# = TABLE2.c# 
AND TABLE3.o# = TABLE2.o# 
AND TABLE4.i = TABLE3.i); 

...您的WHERE子句中引用缺少表TABLE2和表3。

你會想無論是這樣的:

SELECT c#, fn, ln, cat 
FROM TABLE1, TABLE4 
WHERE TABLE1.c# = TABLE4.c#; 

OR

SELECT c#, fn, ln, cat 
FROM TABLE1, TABLE2, TABLE3, TABLE4 
WHERE (TABLE1.c# = TABLE2.c# 
AND TABLE3.o# = TABLE2.o# 
AND TABLE4.i = TABLE3.i); 

...我猜你正在使用Oracle?帶'#'的列標識符是否有效?

+0

是的,第二個是我需要的。我沒有添加Table2和Table3。我想這就是我得到錯誤的原因。我還必須將SELECT語句修改爲TABLE1.C#,否則它是一個模糊的列錯誤。謝謝你的幫助! – Pztar 2012-07-26 04:49:13

+0

帶#的列很好; Oracle在內部使用它們,例如''v $ session'](http://docs.oracle.com/cd/E14072_01/server.112/e10820/dynviews_3016.htm)視圖中的'serial#'。味道雖然;我個人不是粉絲。 – 2012-07-26 08:02:16