我正在学习一门课程中的SQL,并且正在MS SQL Server(即T-SQL)上使用SQL。我正在尝试使用公用表表达式(CTE)重构子查询。这是工作中的子查询版本:
SELECT PAT_ENC_CSN_ID 'CSN',
ADMISSION_PROV_ID 'Provider ID'
FROM PAT_ENC_HSP
WHERE ADMISSION_PROV_ID IN (
SELECT DISTINCT PROV_ID
FROM CL_SER_HIM_LST_VST
WHERE HIM_STATUS_C <> 1001
)
Run Code Online (Sandbox Code Playgroud)
我以为CTE(几乎)是一个替代品,因此我尝试了以下操作:
WITH Not_Good AS ( SELECT DISTINCT PROV_ID
FROM CL_SER_HIM_LST_VST
WHERE HIM_STATUS_C <> 1001
)
SELECT PAT_ENC_CSN_ID 'CSN',
ADMISSION_PROV_ID 'Provider ID'
FROM PAT_ENC_HSP
WHERE PAT_ENC_HSP.ADMISSION_PROV_ID IN (Not_Good.PROV_ID)
Run Code Online (Sandbox Code Playgroud)
但是我在最后一个WHERE
子句中遇到语法错误:The multi-part identifier "Not_Good.PROV_ID" could not be bound.
这是什么问题?
我没有任何JOIN
缺少ON
条件的,也没有看到别名丢失。
在此先感谢您的时间!
小智 5
您已经很接近了,但是您不能以上面列出的方式在'IN'语句中使用CTE。您可以执行以下操作:
WITH Not_Good AS ( SELECT DISTINCT PROV_ID
FROM CL_SER_HIM_LST_VST
WHERE HIM_STATUS_C <> 1001
)
SELECT PAT_ENC_CSN_ID 'CSN',
ADMISSION_PROV_ID 'Provider ID'
FROM PAT_ENC_HSP
WHERE PAT_ENC_HSP.ADMISSION_PROV_ID IN (select PROV_ID from Not_Good)
Run Code Online (Sandbox Code Playgroud)