題1.1、洗掉表的重復記錄
如果記錄完全相同才算重復記錄,請書寫此種情況下的SQL陳述句;
如果有id主鍵(數字,自增1模式),請書寫此種情況下的SQL陳述句。
uj5u.com熱心網友回復:
; with cte as(Select row_number() over (order by id desc) rid,*
From tb
)
Delete from cte where rid >1
uj5u.com熱心網友回復:
第一個 通過全分組來獲取去重第二個的話就是通過id分組
uj5u.com熱心網友回復:
直接delete from cte能實作物理洗掉?
如果我cte中有join會是什么結果?
uj5u.com熱心網友回復:
USE tempdb
GO
IF OBJECT_ID('ta') IS NOT NULL
DROP TABLE ta
GO
CREATE TABLE ta(
id INT IDENTITY(1,1) PRIMARY KEY,
n VARCHAR(10)
)
GO
INSERT INTO ta(n) VALUES ('a')
INSERT INTO ta(n) VALUES ('b')
INSERT INTO ta(n) VALUES ('b')
GO
--洗掉前
SELECT * FROM ta
/*
id n
1 a
2 b
3 b
*/
--洗掉
;WITH cte AS (
SELECT ROW_NUMBER() OVER (PARTITION BY n ORDER BY id DESC) AS rid,* FROM ta
)
DELETE FROM cte WHERE rid>1
--洗掉后
SELECT * FROM ta
/*
id n
1 a
3 b
*/
至于多表的, 你自己試下吧。
個人不建議多表洗掉還這么用,哪怕能實作,因為可讀性不好, 容易誤操作。
uj5u.com熱心網友回復:
第一種情況下 用 分析函式 row_number 人為的給相同資料編號,然后根據編號進行洗掉。參考樓上第一種的都能解決,第二種情況就是小意思了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96112.html
標籤:基礎類
上一篇:sql server創建存盤程序 ,復制某張表的結構并對被復制表添加觸發器
下一篇:提問
