簡體   English   中英

SQL:將子查詢轉換為公用表表達式

[英]SQL: Converting a Sub-query to a Common Table Expression

我正在學習一門課程中的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
    )

我以為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)

但是我在最后的WHERE子句中遇到語法錯誤: The multi-part identifier "Not_Good.PROV_ID" could not be bound.

這是什么問題?

我沒有任何缺少ON條件的JOIN ,也沒有看到別名缺失。

在此先感謝您的時間!

您已經很接近了,但是您不能以上面列出的方式在'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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM