2016-10-02 53 views
0

我最近開始學習SQL,但似乎無法繞過創建從多個表/關係形成相關結果的SQL語句。SQL新手,需要一些查詢建議

考慮以下模式:

Account(accNumber, balance, type) 
Branch(BSB, phone, streetAddress, town) 
registered(accNumber*, BSB*) 

我試圖制定一些輸出: 列出具有特定BSB(123)上註冊的所有accNumber並顯示其列鎮(悉尼)。

我曾嘗試以下語句先查詢:

SELECT accNumber, BSB, town 
FROM ACCOUNT, BRANCH 
WHERE BSB = 123; 

不過,我得到每個帳戶,即使他們不屬於上市BSB,所以我嘗試:

SELECT accNumber, BSB, town 
FROM ACCOUNT, BRANCH 
WHERE BSB = 123 
AND Town = 'Sydney' 
AND account.accNumber=registered.accNumber 
AND branch.bsb=registered.bsb; 

這一次我得到了明確定義的列,因爲它們在「registered」表中具有相同的名稱。

我已經嘗試在選擇統計中使用別名,即accNumber AS ACCOUNT_NUMBER等,但仍然得到含糊不清的定義錯誤。

我試着列出註冊表中的內容,但沒有得到城鎮名稱,只是將accNumber和BSB作爲外鍵傳入。

我似乎無法理解如何從其他表中拉出數據並正確顯示它們,並會非常感謝任何建議!

+3

您應該在'from'子句中使用'join'語句而不是逗號,然後這不會成爲問題。你的第二個例子引用'registered',雖然它沒有出現在你的'from'子句中...... – sgeddes

回答

0

所以這聽起來像一個通用的SQL問題。爲了您的查詢這裏你看什麼:

select a.account_number 
    from account a, brance b, registered r 
    where a.account_number = r.account_number and 
     a.bsb = b.bsb and 
     b.bsb = 123; 

這將讓你從帳戶表中的所有帳號是在BSB 123.當你有一個具有相同的列多個表,您需要告訴Oracle(以及任何有關此事的數據庫)您所指的是哪個「account_number」列(否則由於有多個包含列account_number的表是不明確的)。

SQL是關於表和連接的。如上所述,您有時必須加入幾張表才能獲得所需的內容。如果你不像原來那樣加入表格,你會得到一個「交叉產品」,這不是你想要的。

我知道這是非常「輕」,但希望從上述問題的答案,你會得到一些如何做到這一點的想法。

如果您有任何問題,我很樂意爲您提供更多幫助。在某些時候,每個人都是SQL新手。不要爲此感到難過。它需要練習,然後變得更容易。

-Jim

+0

感謝分配的幫助和支持吉姆 我能夠產生所需的輸出,對這段代碼進行了一些小的修改(我在第一行中只包含了accNumber,BSB和Town以查看3列而不僅僅是一個) 從大家的幫助中,我可以更好地理解創建語句時的處理順序,並且可以看到我的連接類型之前已經有了自己的條件。 再次感謝。 – Ben

1

這可以幫助你開始。

SELECT a.ccNumber, b.BSB, c.town 
FROM ACCOUNT as a 
inner join registered as b on b.accNumber=a.accNumber 
inner join BRANCH as c on c.bsb = b.bsb 
WHERE b.BSB = 123 
    AND c.Town = 'Sydney' 
+0

謝謝Ahmed的幫助,我現在看到我在加入之前的狀態,但由於某種原因Orcacle在您的聲明中拋出錯誤: SQL錯誤:ORA-00933:SQL命令未正確結束 00933. 00000 - 「SQL命令未正確結束」 *原因: *操作: 我確實放置了一個;在您嘗試使用之前的陳述之後,所以它不是分號問題:( – Ben

+0

在數字和數字之間錯誤地添加了空格,我將它刪除,請立即嘗試。 –