2012-03-26 96 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