0

我有两张桌子。

第一个表:端口

Column: PORTID - integer
Column: FRONTINTERFACE - varchar  (eg, "RJ45", "BNC", "SC", "FC", "-")
Column: REARINTERFACE - varchar   (eg, "RJ45", "BNC", "SC", "FC", "-")

第二个表:PortUsed

Column: PORTID - integer
Column: Facing - varchar(1) (eg, "F" or "R")

端口表包含所有端口信息,包括前后接口类型。如果不可用,则相应的接口设置为“-”

如果端口被使用,表 PortUsed 将存储 PortID 和 Facing。

任何人都可以帮助使用 sql 查询来检查端口是否可用。

需求1:检查PortID和Facing是否不在PortUsed表中,确定该端口没有被使用。

要求 2:检查相应的 Front 或 Rear Interface 是否不是“-”

我能够在 2 个单独的 sql 查询中获得结果,但它太慢了。于是找了个sql查询把两者结合起来。我也不想使用存储过程。

4

2 回答 2

0
select *
from Ports a left join PortUsed  b on a.portid = b.portid
where b.portid is null 
  and a.FRONTINTERFACE <> '-' 
  and a.REARINTERFACE <> '-'

我建议将前端和后端接口中的“-”更改为空值

于 2013-01-21T14:51:07.580 回答
0

我花了几天时间弄清楚如何获得正确的结果。

SELECT PortID FROM Ports
WHERE (PortID = @PortID) 
AND (FrontInterface <> '-') 
AND (NOT EXISTS(SELECT PortID, Facing
                FROM PortUsed 
                WHERE (PortID = @PortID) AND (Facing = @Facing)
                )
    )

如果检查背面,则将 FrontInterface 替换为 RearInterface。

于 2013-01-22T09:49:38.293 回答