2016-08-01 163 views
-1

我在IN语句中使用子查询,但结果为空。我猜这个问题是数据类型的,但我无法解决这个问题。SQL子查询返回NULL IN语句

这是工作:

select * 
from qcpcs a with(NOLOCK) 
where status = 0 
    and active = 1 
    and Convert(varchar(8),assigned_to_dept_id) in (10000076, 10000049) 

这不是工作

select * 
from qcpcs a with(NOLOCK) 
where status = 0 
    and active = 1 
    and Convert(varchar(8),assigned_to_dept_id) in (select department_ids from users b 
                where b.[id] = 10000021) 

这是子查询的结果是:

enter image description here

+6

请添加文字,而不是图片。 – jarlh

+4

请将查询发布为文本而不是图片 – TheGameiswar

+0

当您自己运行子查询时,您的子查询是否返回正确的ID? – iamdave

回答

0

正如已经提到好几次,这里真正的解决方案是不用逗号分隔的列表存储你的值。

这且不说,如果你绝对不能改变你的数据库取到上述情况,你可以使用下面的,这是非常低效的和不明智的

select * 
from qcpcs a with(NOLOCK) 
where status = 0 
    and active = 1 
    and patindex('%' + Convert(varchar(8),assigned_to_dept_id) + '%' 
       ,(select department_ids 
       from users b 
       where b.[id] = 10000021 
       ) 
      ) > 0 

或者你可以使用一个字符串分割功能在这里很详细的描述:
http://www.sqlservercentral.com/articles/Tally+Table/72993/

或者你可以解决您的DATAB ASE设计。

+0

这是工作。谢谢。我会考虑你的建议。 – BK52

0
SELECT * 
FROM qcpcs a WITH (NOLOCK) 
WHERE STATUS = 0 
    AND active = 1 
    AND Convert(VARCHAR(8), assigned_to_dept_id) IN (
     SELECT convert(VARCHAR(8), department_ids) department_ids 
     FROM users b 
     WHERE b.[id] = 10000021 
     ) 
+0

这并没有解决问题。如果您查看屏幕截图中子查询返回的数据,则用逗号分隔2个ID。 – iamdave