我正在尝试编写一个查询,我搜索一个表格系统,我想让它向我展示所有有SYSTEM.TYPE =' WIFI'但没有SYSTEM.TYPE =' SENSOR'。尝试使用特定的控制器查询客户端但没有添加设备,以便我们可以推销它们?请注意,客户端可能有其他SYSTEM.TYPES,这些SYSTEM.TYPES无法查询但会存在。
使用SQL Manager,使用当前的查询但结果给出了错误的答案,一个示例是一个名为系统的表,其中每个系统都记录了字段acct_no和type。我希望所有的acct_no在哪里'键入' = WIFI,但没有'类型' =流量。
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 :(得分:2)
这是你在找什么?我的理解是每个ACCT_NO有多个记录,具有不同的TYPE
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
答案 1 :(得分: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的帐号 除了具有“流量传感器”,“喷水器”或“照明”类型的帐户
答案 2 :(得分:-2)
TYPE是Systems表中的列名吗?如果是这样,您可以尝试此查询:
select *
from SYSTEMS
where (SYSTEMS.TYPE='WIFI' and SYSTEMS.TYPE!='SENSOR');