SQL Server查询不存在的地方

时间:2018-02-23 03:37:15

标签: sql-server tsql

我很难获得预期的结果。我有一个表,包括服务器名称和与该服务器关联的所有磁盘驱动器号。我想查询行并返回一个不同的服务器名称列表,其中该服务器上不存在特定的驱动器号。因此,在这种情况下,我想知道所有没有“D”驱动器的服务器。

我尝试使用临时表,不存在,临时表之间没有联接,而不是临时表中的(select ...),我无法检索不同的服务器列表。

有人可以帮我查询一下吗?

我已经包含了一个示例表:

CREATE TABLE DRIVES  (
SERVERNAME NVARCHAR(50),
DRIVE NVARCHAR(5)
)

INSERT INTO DRIVES(SERVERNAME, DRIVE)

SELECT '0001', 'C'
UNION
SELECT '0001', 'D'
UNION
SELECT '0001', 'E'
UNION
SELECT '0001', 'F'
UNION
SELECT '0002', 'C'
UNION
SELECT '0002', 'D'
UNION
SELECT '0002', 'E'
UNION
SELECT '0002', 'F'
UNION
SELECT '0003', 'C'
UNION
SELECT '0003', 'E'
UNION
SELECT '0003', 'F'
UNION
SELECT '0004', 'C'
UNION
SELECT '0004', 'D'
UNION
SELECT '0004', 'E'
UNION
SELECT '0004', 'F'
UNION
SELECT '0005', 'C'
UNION
SELECT '0005', 'E'
UNION
SELECT '0005', 'F'

结果应仅返回服务器0003和0005,因为没有“D”驱动器

谢谢!

3 个答案:

答案 0 :(得分:0)

一种方法使用条件聚合:

<asp:DropDownList ID="ddlInstrumentType2" runat="server" AutoPostBack="true">
</asp:DropDownList>
<asp:Label ID="InstrumentTypeSelected" runat="server" Visible="true"></asp:Label>
<asp:Image class="helpicon" ID="imgSelInst" runat="server" ImageUrl="~/images/help2.png" ToolTip="imgSelInst"/>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" InitialValue="---------   Select Instrument Type   ---------" ControlToValidate="ddlInstrumentType2"
   ErrorMessage="Please select an Instrument Type" ValidationGroup="vgrp1">*
</asp:RequiredFieldValidator>

Demo

答案 1 :(得分:0)

请尝试此操作。如果其中一个驱动器不存在,这将为您提供数据。

SELECT SERVERNAME 
FROM DRIVES
WHERE DRIVE IN ( 'C','D','E','F' )
GROUP BY SERVERNAME
HAVING (  COUNT( DISTINCT DRIVE) ) < 4

<强>输出

SERVERNAME
--------------------------------------------------
0003
0005

(2 rows affected)

答案 2 :(得分:0)

我会使用类似的东西:

select distinct SERVERNAME
from DRIVES
where SERVERNAME not in (select SERVERNAME from DRIVES where DRIVE = 'D')

小提琴:http://sqlfiddle.com/#!18/d1573/3