2013-04-25 83 views
0

我有3个表从我减法数据,并获得大部分的数据我有一个查询的工作很好,但我不能得到一个特定的行,这就是我需要的地方一些帮助。有助于更好地理解联接

表1:

EquipmentID | EquipmentName | EquipmentTypeID 
15   | Tesla   | 68 
16   | Colombus  | 93 

表2:

EquipmentTypeID | DisplayName  | 
68    | Electrical Device| 
93    | GPS Device  | 

表3:

EquipmentID | IPAddress | 
15   | 192.168.1.1| 
16   | 192.168.0.1| 

到目前为止,我得到的是使用如下因素SQL语法如下数据:

SELECT DISTINCT t1.IPAddress, 
t2.EquipmentID 
FROM Table3 t1 
JOIN Table1 t2 ON t1.EquipmentID = t2.EquipmentID 
WHERE IPAddress LIKE '%192%' 

结果我得到的样子

IPAddress | EquipmentID | 
192.168.1.1| 15   | 
192.168.0.1| 16   | 

但是当我做了JOIN像followiing那么结果只是搞砸

SELECT DISTINCT t1.IPAddress, 
t2.EquipmentID, 
t3.EquipmentTypeID, 
t4.DisplayName 
FROM Table3 t1 
JOIN Table1 t2 ON t2.EquipmentID = t1.EquipmentID 
JOIN Table2 t3 ON t3.EquipmentTypeID = t1.EquipmentTypeID 
JOIN Table2 t4 ON t3.EquipmentTypeID = t1.EquipmentTypeID 
WHERE IPAddress LIKE '%192' 

但现在的结果我得到的是以下几点:

IPAddress | EquipmentID |EquipmentTypeID| DisplayName  | 
192.168.1.1| 15   |68    | ElectricalDevice| 
192.168.1.1| 15   |93    | GPS Device  | 
192.168.0.1| 16   |68    | ElectricalDevice| 
192.168.0.1| 16   |93    | GPS Device  | 

有关如何获取相应IPAddress和EquipmentID的正确显示名称的任何想法?

如果您需要更多说明,请让我知道。感谢您的帮助提前

+0

你为什么加入表2的两倍?有什么理由吗?另外,使用LIKE'%192'你不会得到你向我们展示的结果。 – kyooryu 2013-04-25 09:38:32

回答

1

要加入表2两次,并在错误ID:

JOIN Table2 t3 ON t3.EquipmentTypeID = t1.EquipmentTypeID 
JOIN Table2 t4 ON t3.EquipmentTypeID = t1.EquipmentTypeID 

试试这个方法:

SELECT DISTINCT t3.IPAddress, 
t2.EquipmentID, 
t3.EquipmentTypeID, 
t2.DisplayName 
FROM Table3 t3 
JOIN Table1 t1 ON t1.EquipmentID = t3.EquipmentID 
JOIN Table2 t2 ON t2.EquipmentTypeID = t3.EquipmentTypeID 
WHERE IPAddress LIKE '%192' 

注:我改变了连接的表,因为名称这有点令人困惑。

1
SELECT 
t3.IPAddress, 
t3.EquipmentID, 
t2.EquipmentTypeID, 
t2.DisplayName 
FROM Table3 t3 
JOIN Table1 t1 ON t3.EquipmentID = t1.EquipmentID 
JOIN Table2 t2 ON t2.EquipmentTypeID = t1.EquipmentTypeID 
WHERE IPAddress LIKE '%192.%' 
GROUP BY 
t3.IPAddress, 
t3.EquipmentID, 
t2.EquipmentTypeID, 
t2.DisplayName 
+0

感谢您的帮助:)它的工作,当我有多个正确的答案不真的知道该选择什么:)感谢很多:) – Farkiba 2013-04-25 10:22:28

+0

您在代码中使用的答案是一个明显的选择:)很高兴我可以帮助:) – kyooryu 2013-04-25 15:34:46

1

要加入表2的两倍,并在错误ID:

我想你应该JOINT3T1再加入T1T2

像这样:

select * from T3 
Join T1 on T3.EquipmentID = T1.EquipmentID 
Join T2 on T2.EquipmentTypeID = T1.EquipmentTypeID 
WHERE T3.IPAddress LIKE '%192'