2017-08-31 8 views
-1

テーブルSYSTEMSを検索するクエリを作成しようとしていますが、SYSTEM.TYPE = 'WIFI'のSYSTEM.TYPE = 'SENSOR'のないすべてのアカウントを表示します。特定のコントローラをクライアントに照会しようとしましたが、追加の機器がないので、それらを販売することができますか?クライアントにはクエリには役に立たないが存在する追加のSYSTEM.TYPESがあることに注意してください。含めると除外するSQLクエリ

現在のクエリを使用しているが、結果が私に間違った答えを与えているSQL Managerを使用している例は、システムと呼ばれるテーブルで、各システムはフィールドacct_noとtypeで記録されます。私はすべてのacct_noを 'type' = WIFIとしたいが、 'type' = FLOWはない。

SELECT S.ACCT_NO, s.[type] 
FROM [system] S 
LEFT OUTER JOIN [system] FS 
    on FS.acct_no = S.acct_no 
WHERE not exists (SELECT 1 
        FROM [system] 
        WHERE [system].ACCT_NO = fs.ACCT_NO 
        AND FS.[TYPE] in ('flow sensor', 'sprinkler', 'lighting')) 
    AND (s.[type] like '%wifi%') 
+0

あなたの質問は、ここに来てから尋ねる前に、あなた自身でこれを理解しようとしたことを示す必要があります。また、それは非常に不明です - 私はあなたが何を求めているのか正確にはわかりません。 'WHERE SYSTEM.TYPE = 'WIFI''を含めただけでは、他のすべての型を取り除くのに十分ではないでしょうか? – Santi

+1

[DBMS](https://en.wikipedia.org/wiki/DBMS)はどちらを使用していますか? –

+0

サンプルテーブルのデータと期待される結果をフォーマット済みテキストとして追加します。現在のクエリの試行も表示してください。 – jarlh

答えて

-2

TYPEはシステムテーブルの列名ですか?その場合、次のクエリを試すことができます:

select * 
from SYSTEMS 
where (SYSTEMS.TYPE='WIFI' and SYSTEMS.TYPE!='SENSOR'); 
+0

メッセージにエラーがあります。メッセージ102、レベル15、状態1、行3 '' 'の近くの構文が正しくありません。単一レコードの場合は –

+1

タイプはWIFIとセンサーではありませんでした。各アカウントはシステムテーブルに複数回リストされ、それぞれ異なるタイプの複数のレコードを持つことができます。 – xQbert

2

これはあなたが探しているものですか? ACCT_NOごとに異なるタイプのACCT_NOごとに複数のレコードがあることを理解しています。

SELECT s1.ACCT_NO 
FROM [system] s1 
WHERE s1.[type] like '%wifi%' 
    AND NOT EXISTS 
    (SELECT 1 
    FROM [system] s2 
    WHERE s1.ACCT_NO = s2.ACCT_NO 
     AND s2.[type] in ('flow sensor', 'sprinkler', 'lighting')) 
ORDER BY ACCT_NO 
+0

私に正しい応答があるようです。 – xQbert

0

もう1つの方法です。

SELECT Distinct s1.ACCT_NO 
FROM [system] s1 
WHERE s1.[type] like '%wifi%' 
EXCEPT 
SELECT Distinct s2.ACCT_NO 
FROM [system] s2 
WHERE s2.[type] in ('flow sensor', 'sprinkler', 'lighting') 

タイプがwifiのすべてのアカウント番号を選択します。
'flow sensor'、 'sprinkler'、または 'lighting'タイプのアカウントを除く

関連する問題