2013-05-02 31 views
1

我需要在名爲Customers和Addresses(關係1:1)的兩個表上進行自然連接,這些表中的公共列是關鍵ID(根據自然連接將操作的列)。然而,表Customer中的這個Column被稱爲「ID_Customer」,在表地址中它被稱爲「ID」。當公共列有不同名稱時如何進行自然連接?

因爲這個原因,自然連接無法正常工作,因爲程序沒有識別出它是同一列(按重要性)。

我不能改變列名是相同的(因爲很多原因..) 有什麼辦法可以讓這個工作 - 所以程序會理解那些是相同的列?

+0

什麼是「程序」? – RedFilter 2013-05-02 13:28:08

+1

自然連接是基於具有相同name_的_columns的等連接。如果列不具有相同的名稱,則根據定義,不能有自然連接。使用正常的連接。 (並且不要在你的問題中寫下「緊急」,尤其是不要在標題中寫出「緊急」,除非你正在尋找負面關注。) – Mat 2013-05-02 13:30:32

回答

1
SELECT whatever FROM Customers C, Addresses A 
WHERE C.ID_Customer = A.ID 
4

所以不要使用natural join。做一個明確的join代替:

from Customer c join 
    Address a 
    on a.id = c.id_Customer 

而且,我也不會,如果實際的連接條件是驚訝:

 on a.id_Customer = c.id 

(當使用id作爲表的主鍵,一個好的做法是在foregn參考文獻中包含表格名稱)。

作爲一般規則,自然連接在長期內是不好的選擇。您可以將這些查詢存儲在存儲過程,觸發器或應用程序中。然後有人修改表結構 - 添加,刪除或重命名列。並且,代碼停止工作。

我更喜歡總是使用顯式連接。

0

讓我們假設客戶和地址模式如下:

Customer(ID_customer, name) 
Addresses(ID, address) 

然後自然連接的查詢是如下:

SELECT * FROM (Customer AS Customer(ID, name) NATURAL JOIN Addresses);

這會執行自然連接爲目的加入ID兩個表的屬性。

相關問題