如何在 SQL 服务器中使用 IN 与 Select
How to use IN in SQL Server with Select
SELECT CATEGORY
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2
此查询 returns '000001','000002'
以这种格式保存在 CATEGORY
列中。
SELECT *
FROM HR_CATEGORY
WHERE CAT_CODE IN ('000001', '000002')
这个 select 可以很好地处理行字符串
SELECT *
FROM HR_CATEGORY
WHERE CAT_CODE IN (SELECT CATEGORY
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2)
但是当我在 IN 中使用查询时,它 return 没有任何值。
这是什么原因?有什么办法可以解决这个问题?
您尝试过调整值吗?
TRIM()
SELECT *
FROM HR_CATEGORY
WHERE TRIM(CAT_CODE) IN (SELECT TRIM(CATEGORY)
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2)
可能你也有 NULL
category
。尝试将 AND category IS NOT NULL
添加到最后一个 WHERE。
尝试在以下 CATEGORY
上使用 CAST
:
SELECT *
FROM HR_CATEGORY
WHERE CAT_CODE IN (SELECT CAST(CATEGORY AS NVARCHAR(20))
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2)
go with FIND_IN_SET insted of in
我希望这能解决你的问题
您的子查询只返回一行内容:
"'000001','000002'"
要使 IN 子句起作用,每个值必须分隔为两行:
'000001'
'000002'
您必须将 CATEGORY 列中的值拆分为多个字符串。为此,您可以使用字符串拆分函数。网上有很多,这里有一个相关的问答T-SQL: Opposite to string concatenation - how to split string into multiple records
如果 CATEGORY 可以使用撇号连接字符串,例如'000001'
或 '000001','000002'
,那么最好使用 LIKE 和 JOIN 构造,像这样:
SELECT * FROM HR_CATEGORY
INNER JOIN
(SELECT CATEGORY FROM PEA_TEMPLATE WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2) PEA
ON PEA.CATEGORY LIKE '%'''+CAT_CODE+'''%'
SELECT CATEGORY
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2
此查询 returns '000001','000002'
以这种格式保存在 CATEGORY
列中。
SELECT *
FROM HR_CATEGORY
WHERE CAT_CODE IN ('000001', '000002')
这个 select 可以很好地处理行字符串
SELECT *
FROM HR_CATEGORY
WHERE CAT_CODE IN (SELECT CATEGORY
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2)
但是当我在 IN 中使用查询时,它 return 没有任何值。
这是什么原因?有什么办法可以解决这个问题?
您尝试过调整值吗?
TRIM()
SELECT *
FROM HR_CATEGORY
WHERE TRIM(CAT_CODE) IN (SELECT TRIM(CATEGORY)
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2)
可能你也有 NULL
category
。尝试将 AND category IS NOT NULL
添加到最后一个 WHERE。
尝试在以下 CATEGORY
上使用 CAST
:
SELECT *
FROM HR_CATEGORY
WHERE CAT_CODE IN (SELECT CAST(CATEGORY AS NVARCHAR(20))
FROM PEA_TEMPLATE
WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2)
go with FIND_IN_SET insted of in
我希望这能解决你的问题
您的子查询只返回一行内容:
"'000001','000002'"
要使 IN 子句起作用,每个值必须分隔为两行:
'000001'
'000002'
您必须将 CATEGORY 列中的值拆分为多个字符串。为此,您可以使用字符串拆分函数。网上有很多,这里有一个相关的问答T-SQL: Opposite to string concatenation - how to split string into multiple records
如果 CATEGORY 可以使用撇号连接字符串,例如'000001'
或 '000001','000002'
,那么最好使用 LIKE 和 JOIN 构造,像这样:
SELECT * FROM HR_CATEGORY
INNER JOIN
(SELECT CATEGORY FROM PEA_TEMPLATE WHERE TEMP_ID = 000001 AND TEMP_VERSION = 2) PEA
ON PEA.CATEGORY LIKE '%'''+CAT_CODE+'''%'