2013-04-25 78 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'