1. sql中多個欄位同時相同的多餘記錄刪除!
如果c和d裡面沒有一個類似id這樣的唯一列,除非用游標,否則單sql做不到
delete from A a1
WHERE EXISTS(SELECT 1 FROM A WHEE a = a1.a and b = a1.b and c > a1.c)
這樣刪除的是a,b相同只保留c最大的那條
2. SQL刪除多個欄位下所有內容
delete 一般用於整行刪除。
要刪除一行中的部分欄位可以用UPDATE
UPDATE tcinfor SET tc_work_jx =null , tc_work_ky =null , tc_work_xsh =null
3. SQL重復記錄查詢 查詢多個欄位、多表查詢、刪除重復記錄的方法
SQL重復記錄查詢
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷
select
*
from
people
where
peopleId
in
(select
peopleId
from
people
group
by
peopleId
having
count(peopleId)
>
1)
例二:
select
*
from
testtable
where
numeber
in
(select
number
from
people
group
by
number
having
count(number)
>
1
)
可以查出testtable表中number相同的記錄
2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄
delete
from
people
where
peopleId
in
(select
peopleId
from
people
group
by
peopleId
having
count(peopleId)
>
1)
and
rowid
not
in
(select
min(rowid)
from
people
group
by
peopleId
having
count(peopleId
)>1)
3、查找表中多餘的重復記錄(多個欄位)
select
*
from
vitae
a
where
(a.peopleId,a.seq)
in
(select
peopleId,seq
from
vitae
group
by
peopleId,seq
having
count(*)
>
1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄
delete
from
vitae
a
where
(a.peopleId,a.seq)
in
(select
peopleId,seq
from
vitae
group
by
peopleId,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from
vitae
group
by
peopleId,seq
having
count(*)>1)
5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄
select
*
from
vitae
a
where
(a.peopleId,a.seq)
in
(select
peopleId,seq
from
vitae
group
by
peopleId,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from
vitae
group
by
peopleId,seq
having
count(*)>1)
(二)
比方說
在A表中存在一個欄位「name」,
而且不同記錄之間的「name」值有可能會相同,
現在就是需要查詢出在該表中的各記錄之間,「name」值存在重復的項;
Select
Name,Count(*)
From
A
Group
By
Name
Having
Count(*)
>
1
如果還查性別也相同大則如下:
Select
Name,sex,Count(*)
From
A
Group
By
Name,sex
Having
Count(*)
>
1
(三)
方法一
declare
@max
integer,@id
integer
declare
cur_rows
cursor
local
for
select
主欄位,count(*)
from
表名
group
by
主欄位
having
count(*)
>;
1
open
cur_rows
fetch
cur_rows
into
@id,@max
while
@@fetch_status=0
begin
select
@max
=
@max
-1
set
rowcount
@max
delete
from
表名
where
主欄位
=
@id
fetch
cur_rows
into
@id,@max
end
close
cur_rows
set
rowcount
0
方法二
有兩個意義上的重復記錄,一是完全重復的記錄,也即所有欄位均重復的記錄,二是部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。
1、對於第一種重復,比較容易解決,使用
select
distinct
*
from
tableName
就可以得到無重復記錄的結果集。
如果該表需要刪除重復的記錄(重復記錄保留1條),可以按以下方法刪除
select
distinct
*
into
#Tmp
from
tableName
drop
table
tableName
select
*
into
tableName
from
#Tmp
drop
table
#Tmp
發生這種重復的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下
假設有重復的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
select
identity(int,1,1)
as
autoID,
*
into
#Tmp
from
tableName
select
min(autoID)
as
autoID
into
#Tmp2
from
#Tmp
group
by
Name,autoID
select
*
from
#Tmp
where
autoID
in(select
autoID
from
#tmp2)
最後一個select即得到了Name,Address不重復的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)
(四)
查詢重復
select
*
from
tablename
where
id
in
(
select
id
from
tablename
group
by
id
having
count(id)
>
1
)
以上就是小編為大家帶來的SQL重復記錄查詢
查詢多個欄位、多表查詢、刪除重復記錄的方法的全部內容了,希望對大家有所幫助,多多支持腳本之家~
4. SQL 如何刪除單個表中3或多個個欄位重復的記錄
根據多個欄位分組查詢出各自最小的id,刪除除了這些id外的其他數據delete
from
table1
a
where
a.id not
in(
select
min(a1.id)
from
table1
a1
where
group
by
欄位1,欄位2,欄位3。。。)
5. 在sql中如何給多個欄位去重
select max(部門) as 部門,姓名,sum(金額) as 金額 from 表名
group by 姓名
6. 清空一個表下面的某個欄位的SQL語句
方法一,設置B為空
update A set B = null;
方法二,刪除B欄位後重建
alter table A drop column B;
alter table A add B varchar(50);
7. SQL如何用語句清空某表某欄位的值
SQL我不懂 但是原理的話,設置對應的欄位允許空字元串,然後在頁面上用更新資料庫的方法,把那個欄位的值更新成空值
8. 如何使sql數據清零
你好,很高興回答你的問題。
如果問題所說的清零是把指定欄位的值設置成0,那就是使用update語句進行更新這個欄位的值。
如果問題所說的清零是把表中的數據刪除掉,那就是使用delete語句進行數據刪除。
如果有幫助到你,請點擊採納。
9. sql 清空多個表
delete from table1,table2,table3 --這是把表裡的記錄全部刪除
update table1 --這個是把某些欄位變成空值
set [欄位1] = null --我也沒試過 不知道好不好用
,[欄位2] = null --前提條件是 表的欄位不能設為 『不允許為空』
不知道你說的' 內容 ' 是為空啊? 還是刪除啊?
10. 怎樣清空SQL表裡指定欄位的內容
update gx set body=null