2017-08-31 110 views
-1

我想編寫一個查詢,其中i搜索表格系統和我希望它給我看有System.Type的=「WIFI」,但沒有的System.Type =「傳感器」所有帳戶。試圖用特定的控制器查詢客戶,但不添加設備,以便我們可以推銷它們?請注意,客戶端可能會有其他SYSTEM.TYPES查詢無用,但會出現。SQL查詢與包含和排除

使用SQL管理器中,使用當前的查詢,但結果讓我有錯誤的答案,一個例子是所謂的,其中每個系統登錄與域系統acct_no和類型的表。我想要所有的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

我的代碼出錯了:Msg 102,Level 15,State 1,Line 3 '''附近語法不正確。 –

+1

爲單個記錄類型不能WIFI和傳感器。每個帳戶可以在系統表中多次列出,因此每個帳戶有多個不同類型的記錄。 – xQbert

2

這是你在找什麼?我的理解是你有不同的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

這樣做的另一種方法。

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的帳號。
除了有'流量傳感器','噴頭'或'照明'類型的賬戶