1、SQLクエリ重複しない記録方法
1914 ワード
設計のため、重複しない記録値を調べる必要があります.このような問題は、皆さんが経験したことがあると思います.すぐにGOOGLEを見てみると、このような問題はまだ多く、解決策も少なくありません.よく見てください.
たとえば、次の表構造と値--table
fid
name
sex
1
a
男
2
b
男
3
c
女
4
d
女
5
a
男
6
b
男
シナリオ1:distinct
結果:name a b c dは効果を実現しますが、他の記録を同時に開くとしたら?もう一度やってみる
テストには効果がありません.調べてみると、実際にはnameとidフィールドが重複してフィルタされていることがわかります.
検索を続行するには、次の方法があります.
シナリオ2:groupby
Oracleではテストに失敗し、MYSQLで合格したそうです.やってみる
現実は以下の結果である:fid name sex 1 a男2 b男3 c女4 d女
考え続けて、すべてのレコードを開くには、フィールドを指定しないで(*)、この方法はだめらしい!
テスト成功fid---name-----sex 1-----a-----男性2-----b-----男性3-----女性4-----女性
シナリオ3:もともとすでに終わって、突然前の数日ネット上で調べてデータの中ですべてのあるフィールドの重複しない記録を調べたことを思い出します
fid name sex 1 a男性2 b男性5 a男性6 b男性がこのように推定された.
道理で大丈夫です.みんなやってみてください.どんなに多くのフィールドが現実的です.ネット上の方法distinct、Inner Joinなどを振り返ると、面倒で、大きな限界がある.
以下にまとめる. を開く. を開く. を開く.
たとえば、次の表構造と値--table
fid
name
sex
1
a
男
2
b
男
3
c
女
4
d
女
5
a
男
6
b
男
シナリオ1:distinct
select distinct name from table
結果:name a b c dは効果を実現しますが、他の記録を同時に開くとしたら?もう一度やってみる
select distinct name,id from table
テストには効果がありません.調べてみると、実際にはnameとidフィールドが重複してフィルタされていることがわかります.
検索を続行するには、次の方法があります.
シナリオ2:groupby
select *, count(distinct name) from table group by name
Oracleではテストに失敗し、MYSQLで合格したそうです.やってみる
select min(fid),name,sex from table group by name ,
現実は以下の結果である:fid name sex 1 a男2 b男3 c女4 d女
考え続けて、すべてのレコードを開くには、フィールドを指定しないで(*)、この方法はだめらしい!
select * from table where fid in(Select min(fid) FROM table group by name)
テスト成功fid---name-----sex 1-----a-----男性2-----b-----男性3-----女性4-----女性
シナリオ3:もともとすでに終わって、突然前の数日ネット上で調べてデータの中ですべてのあるフィールドの重複しない記録を調べたことを思い出します
select * from table
where name in(select name from table group by name having count(name)=2)
fid name sex 1 a男性2 b男性5 a男性6 b男性がこのように推定された.
select * from table
where name in(select name from table group by name having count(name)=1)
道理で大丈夫です.みんなやってみてください.どんなに多くのフィールドが現実的です.ネット上の方法distinct、Inner Joinなどを振り返ると、面倒で、大きな限界がある.
以下にまとめる.
select distinct name from table
重複しない単一フィールドselect * from table where fid in(Select min(fid) FROM table group by name)
重複しないすべてのフィールド値select * from table where name in(select name from table group by name having count(name)=1)
任意の回数を繰り返す全記録