我在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)
这是子查询的结果:
答案 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/
或者您可以修复您的数据库设计。