Sql 有助于更好地理解连接
我有3个表,从中减去数据,为了得到大部分数据,我有一个查询,效果很好,但我不能得到一个特定的行,这就是我需要一些帮助的地方 表1:Sql 有助于更好地理解连接,sql,sql-server,database,sql-server-2008,Sql,Sql Server,Database,Sql Server 2008,我有3个表,从中减去数据,为了得到大部分数据,我有一个查询,效果很好,但我不能得到一个特定的行,这就是我需要一些帮助的地方 表1: EquipmentID | EquipmentName | EquipmentTypeID 15 | Tesla | 68 16 | Colombus | 93 表2: EquipmentTypeID | DisplayName | 68 | Electric
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 |
然而,当我进行如下连接时,结果就是一团糟
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获取正确的显示名称,您有什么想法吗
如果你需要更多的澄清,请让我知道。感谢您提前提供的帮助您两次使用错误的id加入表2:
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'
注意:我更改了已联接表的名称,因为这有点混乱。您正在联接表2两次,并且使用了错误的id:
JOIN Table2 t3 ON t3.EquipmentTypeID = t1.EquipmentTypeID
JOIN Table2 t4 ON t3.EquipmentTypeID = t1.EquipmentTypeID
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
试着这样做:
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'
注意:我更改了已联接表的名称,因为这有点混乱。您正在联接表2两次,并且使用了错误的id:
JOIN Table2 t3 ON t3.EquipmentTypeID = t1.EquipmentTypeID
JOIN Table2 t4 ON t3.EquipmentTypeID = t1.EquipmentTypeID
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
我认为你应该加入T3到T1,然后加入T1到T2
像这样:
select * from T3
Join T1 on T3.EquipmentID = T1.EquipmentID
Join T2 on T2.EquipmentTypeID = T1.EquipmentTypeID
WHERE T3.IPAddress LIKE '%192'
您两次加入表2,但使用的id错误:
JOIN Table2 t3 ON t3.EquipmentTypeID = t1.EquipmentTypeID
JOIN Table2 t4 ON t3.EquipmentTypeID = t1.EquipmentTypeID
我认为你应该加入T3到T1,然后加入T1到T2
像这样:
select * from T3
Join T1 on T3.EquipmentID = T1.EquipmentID
Join T2 on T2.EquipmentTypeID = T1.EquipmentTypeID
WHERE T3.IPAddress LIKE '%192'
你为什么两次加入表2?这有什么道理吗?另外,如果使用“%192”,您将无法得到您显示给我们的结果。为什么要两次加入table2?这有什么道理吗?另外,对于像“%192”这样的问题,您不会得到您显示给我们的结果。谢谢您的帮助:)它起作用了,当我有多个正确答案时,我真的不知道该选择什么:)非常感谢:)您在代码中使用的答案是一个明显的选择:)很高兴我能提供帮助:)谢谢您的帮助:)它起作用了,当我有多个正确答案时,我真的不知道该选择什么:)非常感谢:)你在代码中使用的答案是一个明显的选择:)很高兴我能帮忙:)