select * from tblCustomer where CustomerName in ('A','B','C','Y','Z')
假设客户A,B& C存在于tblCustomer中。
所以,我想在SQL中输出Y,Z。客户在不使用union子句的情况下命名tblCustomer中不存在的那些。
答案 0 :(得分:0)
对于SQL Server,您可以使用2008版中引入的表值构造函数。
select n as CustomerName from (values('A'), ('B'), ('C'), ('Y'),('Z')) a(n)
left join tblCustomer c
on a.n = c.customerName
where c.customerName is null
查询返回:
CustomerName
-------
Y
Z
修改强> 您始终可以使用返回表值的函数。
CREATE FUNCTION [dbo].[ListToTable]( @ValueList varchar( 2000 ) )
RETURNS @ValuesTable TABLE ( Value varchar(80) )
AS
BEGIN
DECLARE
@ValueSeparator varchar(1),
@ValueSeparatorIndex int
SET @ValueSeparator = ',';
SET @ValueList = LTRIM( @ValueList )
SET @ValueSeparatorIndex = CHARINDEX ( @ValueSeparator, @ValueList );
WHILE @ValueSeparatorIndex > 0
BEGIN
INSERT INTO @ValuesTable( Value ) VALUES( SUBSTRING( @ValueList, 1, @ValueSeparatorIndex - 1 ) );
SET @ValueList = LTRIM( SUBSTRING( @ValueList , @ValueSeparatorIndex + 1, LEN(@ValueList ) - @ValueSeparatorIndex ) );
SET @ValueSeparatorIndex = CHARINDEX ( @ValueSeparator, @ValueList );
END
IF LEN(@ValueList) > 0
INSERT INTO @ValuesTable( Value ) VALUES( @ValueList );
RETURN
END
之后你可以用以下方式使用它:
select A.Value as CustomerName from ListToTable('A,B,C,X,Y') A
left join tblCustomer c
on a.Value = c.customerName
where c.customerName is null