求一條查詢重復數據的SQL語句
給你簡化一下思路:
當前表結構
Create Table tb(Id Int, Name Varchar2(10), sex Varchar2(10));
--初始數據
Insert Into tb Values(1,'11','x');
Insert Into tb Values(2,'22','y');
Insert Into tb Values(3,'11','z');
Insert Into tb Values(4,'11','w');
Insert Into tb Values(5,'22','i');
需求:對name單個的取出 + name多個相同的取一個(比如id最小的);
Select *
From Tb
Where Name In (Select Name
From (Select Name, Count(*) Total From Tb Group By Name) Tb1
Where Total = 1)
Union All
Select *
From Tb
Where Id In (Select Id
From (Select Name, Min(Id) Id
From Tb
Where Name In (Select Name
From (Select Name, Count(*) Total
From Tb
Group By Name) Tb2
Where Total >1) Group By Name) Tb3);
對你的具體需求,有多個條件項的可以繼續加入,我沒繼續按你的表結構做下去;
以上SQL親自驗證,返回正確結果;
如果不通或者你的表結構、sql不能通過的話,可發站內信給我;
(時間問題,沒做SQL優化)
求一條查詢重復數據的SQL語句
給你簡化一下思路:當前表結構Create Table tb(Id Int, Name Varchar2(10), sex Varchar2(10));--初始數據Insert Into tb Values(1,'11','x');Insert Into tb Values(2,'22','y');Insert Into tb Values(3,'11','z');Insert Into tb Values(4,'11','w');Insert Into tb Values(5,'22','i');需求:對name單個的取出 + name多個相同的取一個(比如id最小的);Select * From Tb Where Name In (Select Name From (Select Name, Count(*) Total From Tb Group By Name) Tb1 Where Total = 1)Union AllSelect * From Tb Where Id In (Select Id From (Select Name, Min(Id) Id From Tb Where Name In (Select Name From (Select Name, Count(*) Total From Tb Group By Name) Tb2 Where Total > 1) Group By Name) Tb3);對你的具體需求,有多個條件項的可以繼續加入,我沒繼續按你的表結構做下去;以上SQL親自驗證,返回正確結果;如果不通或者你的表結構、sql不能通過的話,可發站內信給我;(時間問題,沒做SQL優化)。
關于SQL查詢重復語句
經過試驗,下面的方法能滿足你的要求。
Sql Server里面如果沒有設定主鍵而刪除重復數據很麻煩:
一:保留重復記錄中的一條記錄,其他全部刪除。
--1:建立臨時表,把不重復的數據轉存
select distinct * into #Tmp from 表名;
--2:刪除原表數據
truncate table 表名;
--3:將數據導回
insert into 表名 select * from #Tmp;
--4:刪除臨時表
drop table #Tmp;
******************
如果是oracle的話,把 rowid 查出來,按照rowid刪除就可以了。
select rowid,表名.* from 表名;
delete from 表名 where rowid != '剛才查詢出的某個值'
commit;
******************
補充:如果你的表中只有這兩個字段的話,用上面的方法就能達到你的要求。
如果不是,用查詢分析器打開這個標,選重要刪除的數據,右鍵刪除即可,比sql來的簡單的多。
---
以上,希望對你有所幫助。
sql語句如何查詢一個表中某一列的相同數據
這個查找過程分兩步走:
1、找出這列中有相同內容的記錄。代碼如下:
select 列名 from 表名 group by 列名 having count(列名) > 1
2、把這些有相同內容的記錄,查出來。代碼如下:
select 列名 from 表名 where 列名 in (select 列名 from 表名 group by 列名 having count(列名) > 1)
這些我已經調試過了
怎么利用SQL語句查詢數據庫中具體某個字段的重復行
可用group by……having來實現。
可做如下測試: 1、創建表插入數據: create table test(id int,name varchar(10))insert into test values (1,'張三')insert into test values (2,'李四')insert into test values (3,'張三')insert into test values (4,'王五')insert into test values (5,'趙六')其中name是張三的有兩行,也就是重復行。 2、執行sql語句如下: select * from test where name in (select name from test group by name having COUNT(*)>1)結果如圖: 。
轉載請注明出處華閱文章網 » 查詢重復的sql語句