2012-03-26 84 views
1

Im在加入兩個表時遇到了一些麻煩。這就是我的兩個表的樣子:如何加入表sql服務器

表1

Customer_ID CustomerName Add. 
1000   John Smith 
1001   Mike Coles 
1002   Sam Carter 

表2

Sensor_ID  Location  Temp CustIDFK 
1000   NY   70 
1002   NY   70 
1000   ...   ... 
1001 
1001 
1002 

期望:

Sensor_ID  Location  Temp CustIDFK 
1000   NY   70  John Smith 
1002   NY   70  Sam Carter 
1000   ...   ...  John Smith 
1001        Mike Coles 
1001 
1002 

我從表1中我的主鍵進行CUSTOMER_ID ,在表2中創建custIDFK並將其設置爲我的外鍵。我對sql server非常陌生,所以我仍然在整個關係部分遇到問題。我的目標是將一個customer_ID與一個Sensor_ID進行匹配。問題是,表2沒有「唯一的ID」,因爲他們重複,所以我不能設置我的外鍵。我知道我將不得不做內部連接或外部連接,我只是不知道如何將傳感器ID與客戶連接。我正在考慮給我的sensor_ID一個唯一的ID,但是插入到表2中的數據來自另一個程序。有什麼建議麼?

+0

@Andriy,感謝您的編輯。 – Rick 2012-03-26 17:22:26

回答

4

根據您的數據,看起來值Sensor_ID應該存在於CustIDFK中。然後我會建議在您的傳感器表中創建一個身份值Sensor_ID,並將該值作爲此表的主鍵。

如果您想關聯這兩個表格,則只要已經用Sensor_ID中的當前值正確填充,您就可以簡單地加入Customer_IDCustIDFK

SELECT 
    t1.Customer_ID, t1.CustomerName, t2.Location, t2.Temp 
From 
    Table1 t1 JOIN 
    Table2 t2 ON t1.Customer_ID = t2.CustIDFK 
+0

,所以我明白Sensor_ID中的數據應該在CustIDFK中。但是,我不明白爲什麼Sensor_ID會更改爲標識值。如果我的Sensor_ID中的數據位於CustIDFK中,我不應該將其作爲我的主鍵嗎? – Rick 2012-03-26 17:27:02

+0

主鍵是唯一標識表中的一行的值(或值的組合)。由於Customer和Sensor之間存在一對多關係,因此Customer_ID只是傳感器表中的外鍵(不同表的主鍵),而不是傳感器表中的主鍵。由於您需要對傳感器表進行某種類型的PK,因此建議將sensor_id更改爲自動生成的標識值,以便唯一標識傳感器表中的每一行。 – 2012-03-26 17:29:49

+0

好吧,現在更有意義。但我如果說,將Sensor_ID從數據類型int更改爲numeric或uniqueidentifier,將其設置爲您建議的主數據庫,我將無法生成Customer_ID(int數據類型),因爲數據類型不匹配。 – Rick 2012-03-26 17:57:55

1

我不能完全肯定,你真正看到問題,一個簡單的自然連接應該做的:

SELECT T1.CustomerName, T2.SensorID, T2.Location, T2.Temp 
FROM Table1 AS T1, Table2 AS T2 
WHERE T1.Customer_ID = T2.CustIDFK 

既然你不表2的ID列加入,而是你加入外鍵無關緊要,表2中沒有唯一鍵。

+0

是的,你提供的代碼可能會爲我做伎倆。但是,當我執行它時,它會顯示沒有數據的列的名稱。我的問題依賴於我如何繪製關係。 – Rick 2012-03-26 17:37:14