Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有助于更好地理解连接_Sql_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

Sql 有助于更好地理解连接

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

我有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          |
然而,当我进行如下连接时,结果就是一团糟

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
我认为你应该
加入
T3T1,然后加入T1T2

像这样:

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
我认为你应该
加入
T3T1,然后加入T1T2

像这样:

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”这样的问题,您不会得到您显示给我们的结果。谢谢您的帮助:)它起作用了,当我有多个正确答案时,我真的不知道该选择什么:)非常感谢:)您在代码中使用的答案是一个明显的选择:)很高兴我能提供帮助:)谢谢您的帮助:)它起作用了,当我有多个正确答案时,我真的不知道该选择什么:)非常感谢:)你在代码中使用的答案是一个明显的选择:)很高兴我能帮忙:)