1

私は、ID番号に基づいて一連の人々を削減するCTEを持っています。現時点では、これをテストする良い方法がありません。これまで、削除ステートメントと組み合わせてCTEを使用したことはありません。これは正しいと思いますが、確信が持てたら続行したいと思います。

これをテストしたところ、次のエラーが発生しました。

(影響を受ける0行)
メッセージ208、レベル16、状態1、行35
無効なオブジェクト名'x'。

私はここで何が間違っているのですか?

--this CTE pares down the number of people that I need for my final result set
;with x as (select distinct patid from
(
select distinct patid
    from clm_extract
    where (diag1 like '952%' or diag1 like '806%') and drg =444

union
select distinct patid
    from clm_extract
    where (diag2  like '952%' or diag2 like '806%') and drg =444

union
select distinct patid
    from clm_extract
    where (diag3  like '952%' or diag3  like '806%') and drg =444
union
select distinct patid
    from clm_extract
    where (diag4  like '952%' or diag4  like '806%') and drg =444
union
select distinct patid
    from clm_extract
    where (diag5  like '952%' or diag5  like '806%') and drg =444
) x

)
--this is a query to show me the list of people that I need to delete from this table because they do not match the criteria
select distinct x.patid
    from x
    inner join clm_extract as c on c.patid = x.patid
    where x.patid !=1755614657 (1 person did match)

--this is my attempt at using a CTE with said query to remove the IDs that I don't need from my table

delete from clm_extract
where patid in(select distinct x.patid
    from x
    inner join clm_extract as c on c.patid = x.patid
    where x.patid !=1755614657)
4

1 に答える 1

2

私はあなたのCTEが間違っていると思います-あなたはCTEが呼ばれx、そのCTEの中にあなたは副選択もエイリアスされていますx-これは混乱を引き起こしています...

なぜ持っていないのですか?

;with x as 
(
    select distinct patid
    from clm_extract
    where (diag1 like '952%' or diag1 like '806%') and drg =444

    union

    select distinct patid
    from clm_extract
    where (diag2  like '952%' or diag2 like '806%') and drg =444

    ......     
)
select 
    distinct x.patid
from x
inner join clm_extract as c on c.patid = x.patid
where x.patid !=1755614657 (1 person did match)

CTE内にその余分なサブクエリを含めることには、必要性も利点もありません。本当に...。

于 2012-10-16T17:28:29.373 に答える