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を実行すると、結果がめちゃくちゃになります

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 の正しい表示名を取得する方法についてのアイデアはありますか?

さらに明確にする必要がある場合は、お知らせください。事前に助けてくれてありがとう

4

3 に答える 3

1

Table2 に 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'

注: 少し紛らわしいので、結合されたテーブルの名前を変更しました。

于 2013-04-25T09:42:17.707 に答える
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
于 2013-04-25T09:42:47.027 に答える
1

Table2 に 2 回、間違った ID で参加しています:

JOIN T3T1に、次に JOIN T1T2にすべきだと思います。

このような :

select * from T3
Join T1 on T3.EquipmentID = T1.EquipmentID
Join T2 on T2.EquipmentTypeID = T1.EquipmentTypeID 
WHERE T3.IPAddress LIKE '%192'
于 2013-04-25T09:48:47.013 に答える