2017-03-06 3 views
0

こんにちは、ありがとう。複数の列にわたってcount = 1のレコードを数えて選択する方法

2つのSQL文を簡略化しようとすると、大したことはありません。表中の

  1. カウントユニークなレコードがユニークで、私は、全体のレコードが唯一発見された意味(
  2. は、テーブル内のユニークなレコードを選択します(ユニークで、私は、全体のレコードがテーブルに一度だけ発見された平均値)

テーブルには30個の列があるため、SQLに個別にすべてを含めるのではなく、単にテーブルのすべての列を指定する方法がありますか?

私はあなたがすべての列名を綴るこの作業を得た(「COL nは名前が」最後の列を指します)が、ちょうどそう多くの列があるので、それは理想的ではありません...

SELECT col 1 name, col 2 name, col 3 name, …, col n name FROM table name 
GROUP BY col 1 name, col 2 name, col 3 name, …, col n name 
Having Count(*)=1 

おかげ deutz

+3

を、あなたはすべての列を指定する必要があります。入力しない場合は、スキーマのメタデータを使用して名前を取得できます。 –

+0

#2の場合は、少なくとも列名の完全なリストを2度目に繰り返す 'GROUP BY'節の必要性を取り除く、' SELECT DISTINCT'を使うことができます。 –

+0

ゴードンとティムに感謝します。ティム、DISTINCTはテーブルに何回出現するかにかかわらず、各レコードの1つを取得すると思います。私はテーブルに一度だけ現れるレコードだけを必要とします。残念ながら、WHERE句にCOUNT = 1を指定することはできません。 – deutz

答えて

0
create view tab_view1 as select DISTINCT * from tab; 
select COUNT(*) from tab_view1; -- first desired result 
select * from tab_view1; -- second desired result 

最初の発生はユニークで、2番目は発生しません。あなたが重複している任意のレコード除外したい場合は

:ほとんどのデータベースで

create view tab_view2 as select tab.*, COUNT(*) AS occurs 
from tab group by tab.* 
having COUNT(*) = 1; 
select COUNT(*) from tab_view2; -- first desired result 
select * from tab_view2; -- second desired result 
+0

ユージンに感謝します。 – deutz

+0

GROUP BYは製品固有のものであり、有効なANSI SQLではありません。 – jarlh

+0

いつでもすべてのテーブルの列を簡単にリストすることができます –

関連する問題