2

id フィールド (自動インクリメントではない) を含むテーブルがあるとします。そのフィールドには重複するエントリが含まれます。そのIDの個別のエントリを取得したい。

私のテーブルが次のようなものであると考えてください:

id    state   city
1      efef   dfdd
2      dwef   sdfsd
1      fdds   fsdfs

ここで、ID 1,2 の都道府県を取得する必要があります。

このクエリを試しました

SELECT * 
FROM   Event 
WHERE  Outletid = (SELECT DISTINCT Outletid FROM Event)

しかし、id が 1 のデータが来ています (つまり、id のデータが 2 つ来ています)。誰でも助けることができますか?

4

4 に答える 4

2

これにより、ごとに1つのレコードのみが返されIDます。以下のクエリは、 idフィールドMIN()を使用して都市と州の両方の値を返します。GROUP BY複数あり、1IDつの値のみを返したいので、これは要件を満たす最初のレコードのみを返します。

select ID, min(city) city, min(state) state
from yourTable
group by ID

SQL FiddlewithDemoを参照してください

したがって、これは次のように機能します

YourTable
ID   city    state
1    efef    dfdd
2    dwef    sdfsd
1    fdds    fsdfs

MIN()都市と州の列とIDの値を取得すると、次のGROUP BYようになります。

YourTable
ID   city    state
1    efef    dfdd
2    dwef    sdfsd

MIN()シーケンスの最下位を返します。したがって、citywith IDof1はで始まり、その前eにあるため、選択されます。は、一致するすべてのものを1つのクラスターに結合します。efGROUP BYID

次に、IDが重複しているレコードを除外する場合は、クエリを次のように変更できます。

select ID, min(city)  city, min(state)   state
from yourTable
group by ID
having min(city) = max(city)  
   and min(state) = max(state)

編集:

次のものも使用できます。

select min(rowid) rowid, ID, city, state
from yourTable
group by ID

また:

select *
from yourTable t1
inner join
(
  select min(rowid) row_id, ID
  from yourTable
  group by ID
) t2
  on t1.rowid = t2.row_id
  and t1.id = t2.id
于 2012-08-22T11:45:50.450 に答える
1

これを試してください:SQLサーバーを使用している場合

このテーブルには主キーがないため、削除するレコードを特定するのは困難です。だからあなたは次のことができます

ステップ1:

;with cte as(
     select  id   , state,   city,
     row_number() over (partition by id order by (select 0))as row_num
     from <table>)
select * into #tmp
from cte where row_num=1

ステップ2:

truncate table <table>

ステップ3:

insert into <table>
select * from #tmp
于 2012-08-22T11:19:22.490 に答える
1

別の行 ID または同等の一意の列を挿入する

select id,state,city
from Event e1
where e1.rowID in(
   select min(e2.rowID)
   from Event e2
   group by id)
于 2012-08-22T11:22:44.470 に答える
1
delete * 
  from mytable 
 where rowid not in (
     select min(rowid) 
       from mytable
      group by column1, column2
     ) -- column1, column2 are the duplicate columns with which we want to group the rows

上記のクエリは、すべての重複を削除するための一般的なクエリです。内部クエリは、重複する列 (column1、column2) に対して単一の行を返します

編集: 上記のクエリは oracle でテストされていることに注意してください。rowid は、オラクルがすべての行に提供するシステム生成 ID であり、一意です。したがって、いくつかの列でグループ化を使用し、条件を満たす行が 3 つある場合、オラクルは行 ID を 1、2、および 3 としてそれらに追加します。

他のすべてのデータベースには、クエリの結果データに行番号を追加するという同様の概念があると確信しています

于 2012-08-22T11:24:50.117 に答える