SQL子查询在STATEMENT中返回NULL

时间:2016-08-01 11:48:17

标签: sql sql-server tsql

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

这是有效的:

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

2 个答案:

答案 0 :(得分: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
        )

答案 1 :(得分: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/

或者您可以修复您的数据库设计。