0

私は2つのテーブルを持っています。

最初の表:ポート

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

2番目のテーブル:PortUsed

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

ポートテーブルには、フロントおよびリアインターフェイスタイプを含むすべてのポート情報が含まれています。使用できない場合、それぞれのインターフェースは「-」として設定されます

ポートが使用されている場合、PortUsedテーブルにはPortIDとFacingが格納されます。

誰かがSQLクエリを手伝って、ポートが使用可能かどうかを確認できますか?

要件1:PortIDとFacingがPortUsedテーブル内にないことを確認して、ポートが使用されていないことを確認します。

要件2:それぞれのフロントまたはリアインターフェイスが「-」でないことを確認します

2つの別々のSQLクエリで結果を取得できますが、遅すぎます。したがって、2つを組み合わせるための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 に答える