使用count 和distinct(去重)關鍵字可以查看資料庫某列是否有重復項。例如:
select count(discinct(colunmname)) from table_name;
如果上述查詢統計結果大於count(colunmname),則代表這一列有重復項。
(1)sql如何查表中的重復內容擴展閱讀
SQL SELECT DISTINCT 語句用法介紹:
在表中,可能會包含重復值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。
關鍵詞 DISTINCT 用於返回唯一不同的值。
語法:
SELECT DISTINCT 列名稱 FROM 表名稱
使用 DISTINCT 關鍵詞,例如要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語句:
SELECT Company FROM Orders
Ⅱ sql查找某一欄位相同的所有數據
1、在我們的電腦上打開資料庫,這里新建一張含有重復數據的user表做示例。
Ⅲ sql 查找一張表中重復的個數
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷
select * from people
where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1)
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)
(五)另一個經典方法 刪除欄位filed重復的
SELECT min(ID) as id into #TBA FROM table group by filed order by id
delete from table where id not in (select id from #TBA)
求採用,個人精髓!
Ⅳ 用SQL查詢兩個表中相同的數據
1、創建測試表;
create table test_col_1(id number, var varchar2(200));
create table test_col_2(id number, var varchar2(200));
Ⅳ sql查詢兩個表相同的數據
SQL語句如下:
SELECT * from TABLE1
full join TABLE2 on TABLE1.xingming = TABLE2.xingming
where
TABLE1.xingming is null or TABLE2.xingming is null
分析:
1、首先得出兩個表的並集
從結果中可以看出,表1中的趙二在表2中沒有相同xingming的記錄。
表2中的劉六在表1中沒有相同xingming的記錄。
本題還有其它多種解法,此處列出比較好理解的一種。
(5)sql如何查表中的重復內容擴展閱讀:
使用自聯接
即使表在資料庫中沒有自反關系,也可將它與自身聯接。 例如,可使用自聯接查找生活在同一城市的作者對。
與任何聯接一樣,自聯接至少需要兩個表。 不同之處在於,不是向查詢中添加第二個表,而是添加同一個表的第二個實例。 這樣,可將表的第一個實例中的列與第二個實例中的同一列相比較,這樣可相互比較列中的值。查詢和視圖設計器為表的第二個實例分配一個別名。
例如,如果要創建自聯接來查找居住在 Berkeley 內的所有作者對,可將表的第一個實例中的 city 列與第二個實例中的 city 列相比較。 所得到的查詢可能類似於:
SELECT
authors.au_fname, authors.au_lname, authors1.au_fname AS Expr2, authors1.au_lname AS Expr3
FROM authors INNER JOIN authors authors1 ON authors.city = authors1.city
WHERE
authors.city = 'Berkeley'
參考資料:
網路.full join
Ⅵ 如何用一條SQL語句查詢資料庫重復記錄
方法如下:
select
*
from
你的表名
a
where
id=(select
min(id)
from
你的表名
whereitem_id=a.item_id)
在查詢之前先把資料庫表中的第一行復制到sid里在去,然後讓sid和下面的每一行進行比較
取所有相同的行的最小的一下,也可以取最大的,結果是一樣的。
這樣讓所有的行都比較不就得到不重復的數據了。
Ⅶ sql語句如何查詢一個表中某一列的相同數據
假設表名是num,列名是a,則查詢語句為:
SELECT * FROM num WHERE a IN(
SELECT a FROM num GROUP BY a HAVING COUNT(a)>1
)
其中:
SELECT 語句:SELECT 語句用於從表中選取數據。結果被存儲在一個結果表中(稱為結果集)。
WHERE 子句:如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句。
GROUP BY 語句:GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。
HAVING 子句:在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。
COUNT() 函數:返回匹配指定條件的行數。
(7)sql如何查表中的重復內容擴展閱讀:
sql語言特點:
1、一體化:SQL集數據定義DDL、數據操縱DML和數據控制DCL於一體,可以完成資料庫中的全部工作。
2、使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主語言中使用。
3、非過程化:只提操作要求,不必描述操作步驟,也不需要導航。使用時只需要告訴計算機「做什麼」,而不需要告訴它「怎麼做」。
4、語言簡潔,語法簡單,好學好用:在ANSI標准中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。
Ⅷ sql 怎麼查看一張表裡面是否有兩條相同的數據
太多人不懂裝懂了,看不下去,給你一些參考吧:
先假設你判斷兩條記錄是不是重復的條件是A、B、C、D、E五個欄位都完全相同視為重復數據。
Ok,具體的SQL如下:
Select
A,
B,
C,
D,
E,
COUNT(*)
as 記錄條數
From
表1
Group
By
A,
B,
C,
D,
E
Having
COUNT(*)
>
1
說明:根據你要視為重復的這些欄位來做分組,統計這些欄位的內容都完全相同的記錄條數,然後使用
Having
COUNT(*)
>
1
取出其中統計的條數大於1的即表示有重復2條記錄以上的記錄。
但是,如果你需要找出包含這些重復數據的的明細記錄到底有哪些,你可以考慮下面的進一步聯合查詢:
Select
*
From
表1
as
X
Inner
Join
(Select
A,
B,
C,
D,
E,
COUNT(*)
as
記錄條數
From
表1
Group
By
A,
B,
C,
D,
E
Having
COUNT(*)
>
1)
as
Y
ON
X.A
=
Y.A
and
X.B
=
Y.B
and
X.C
=
Y.C
and
X.D
=
Y.D
and
X.E
=
Y.E
Ⅸ 怎樣在SQL查詢一個表中重復的名字
總結:
兩個意義上的重復記錄,一是完全重復的記錄,也即所有欄位均重復的記錄,二是部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。
1、(1)對於第一種重復,比較容易解決,使用復制代碼代碼如下:select distinct * from tableName
(2)如果該表需要刪除重復的記錄(重復記錄保留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)