以下查询出了什么问题。
我传递4个值作为此查询的输入,我期待三行作为输出。
因为4个值中的一个存在于listing_cart表中。
但它返回0
行。
DECLARE
@AgentID varchar(20),
@StringValues varchar(max),
@ContactKey int,
@Note varchar(255)
SET @AgentID = 'c110010'
SET @StringValues = '08-328222,08-337333,09-348444,09-352555'
SET @ContactKey = 0
SET @Note = ''
SELECT @AgentID as agentid,mlsnum,'New' as status,ADDRESS,@Note as notes,PROPERTY_TYPE as propertytype FROM mls_unified_svo_tbl (nolock)
WHERE mlsnum IN (Select txt From [dbo].[fn_ListToTable](@StringValues, ','))
AND mlsnum NOT IN (select mlsnum from listing_cart (nolock) where agentid = @AgentID and contact_key = @ContactKey)
答案 0 :(得分:2)
这是您的查询:
SELECT @AgentID as agentid, mlsnum, 'New' as status, ADDRESS, @Note as notes,
PROPERTY_TYPE as propertytype
FROM mls_unified_svo_tbl
WHERE mlsnum IN (Select txt From [dbo].[fn_ListToTable](@StringValues, ',')) AND
mlsnum NOT IN (select mlsnum
from listing_cart
where agentid = @AgentID and contact_key = @ContactKey
);
除了没有匹配的明显条件之外,还有许多可能出错的事情。你应该知道:
fn_ListToTable(@StringValues, ',')
实际上会返回您期望的值。特别是,字符串的开头或结尾没有多余的字符。listing_cart
有一个名为mlsnum
的列,而且从不NULL
。我会非常小心子查询中的列,而是使用它:
mlsnum NOT IN (select lc.mlsnum
from listing_cart lc
where lc.agentid = @AgentID and lc.contact_key = @ContactKey
)
一种可能性是listing_cart
将mlsnum
称为其他内容。该查询有效,因为该值与外部表相关,但not in
始终返回false。