Sql server 使用

Sql server 使用,sql-server,Sql Server,我正在尝试创建一个查询,该查询返回的结果不包括列中的4个特定值 这是我的密码: SELECT CustomerID, ContactName, Country FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE (Country <> ('UK')('Austr

我正在尝试创建一个查询,该查询返回的结果不包括列中的4个特定值

这是我的密码:

SELECT CustomerID,
       ContactName,
       Country
FROM   Customers
WHERE  CustomerID IN (SELECT CustomerID
                      FROM   Customers
                      WHERE  (Country <> ('UK')('Australia')('Canada'))); 
如果我只排除一个国家,但不排除多个国家,则此选项有效

提前感谢您提供的任何帮助。

请勿在operator中使用

列表应该用逗号分隔,列表中的每个值都不需要开/闭括号。另外,您不需要子查询,只需添加filterwhere子句即可

确保不要在列表中传递任何空值,因为当列表中存在空值时,NOT IN会失败

使用NOT IN运算符

Select
  CustomerID, ContactName, Country 
From Customers
Where CustomerID NOT IN ('USA','UK','Australia','Canada');
列表应该用逗号分隔,列表中的每个值都不需要开/闭括号。另外,您不需要子查询,只需添加filterwhere子句即可


确保在列表中不传递任何空值,因为在列表

< p>中存在空值时不发生故障。您可以考虑在特殊表中定义排除的国家,例如排除国家。这将把数据排除在外的国家/地区与逻辑选择客户不在排除在外的国家/地区分开。在这种情况下,您的查询可以如下所示:

Select
  CustomerID, ContactName, Country 
From Customers
Where CustomerID NOT IN ('USA','UK','Australia','Canada');
select CustomerID, ContactName, Country 
from Customers C
    left join ExcludedCountry EC ON EC.Name = C.CustomerID 
where CustomerID IS NOT NULL


这个解决方案的优点是更容易地管理被排除的项目。

< P>你可以考虑在一个特殊的表格中定义被排除的国家,例如被排除的国家。这将把数据排除在外的国家/地区与逻辑选择客户不在排除在外的国家/地区分开。在这种情况下,您的查询可以如下所示:

select CustomerID, ContactName, Country 
from Customers C
    left join ExcludedCountry EC ON EC.Name = C.CustomerID 
where CustomerID IS NOT NULL


此解决方案的优点是更容易管理排除的项目。

1+第二种建议方式。。。第一个通常表现更差。是的,这就是我的评论,第二个查询可能会更快。这也可能取决于实际看到差异的项目数量。1+表示第二种建议方式。。。第一个通常表现更差。是的,这就是我的评论,第二个查询可能会更快。它也可能取决于实际看到差异的项目数量。