0
重複を削除するためにCTEを使用する場合は、元のテーブルから行を削除します。どうしたの?重複を削除するためにcteを使用すると、元のテーブルから行が削除される方法
一部の値に対してCTEを更新すると、元のテーブルに反映されないのはなぜですか?例えばのために
:
CREATE TABLE TABLE_DUPLICATEREMOVALTEST
(
ID INT,NAME VARCHAR(20)
)
INSERT INTO TABLE_DUPLICATEREMOVALTEST
SELECT 1,'hina'
union all
SELECT 1,'hina'
union all
SELECT 1,'hina'
union all
SELECT 2,'Tina'
union all
SELECT 3,'Mina'
union all
SELECT 4,'Lina'
union all
SELECT 5,'Sina'
-- To test update
alter table TABLE_DUPLICATEREMOVALTEST
add Row_no INT
;WITH CTE (rNO,Row_no)
AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY ID,NAME ORDER BY ID, NAME) AS rNO, id
FROM TABLE_DUPLICATEREMOVALTEST
)
UPDATE CTE SET Row_no = 100 WHERE Rno = 1 ---Not updating column in the main table
--DELETE FROM CTE WHERE Rno ! = 1 ---but this removes rows from main table
SELECT * FROM TABLE_DUPLICATEREMOVALTEST
誰でも助けることができますか?私はそれを見つけたが満足できるものは何も見つかりませんでした。
更新が有効であるはずです。自分の正面に正しいデータがあることは確かですか? –
Row_no列を更新していません。代わりに、Row_noエイリアスにidを渡しているため、ID列 –
が更新されています。元のRow_no列を追加して部品を選択し、部品をWITH CTE(rNO、id、Row_no)に変更します。 –