2017-05-25 12 views
1

私は自分のデータベースを調べています。今ではいつか、簡単な整数の1つの主キーしか持っていません。 私はこれをSQL: find missing IDs in a tableに見ましたが、それは数値列用でした。不足しているvarcharの主キーを見つける

私はSOそのものから以下の解決法を得て、PKが整数の場合に役立ちます。 は、私は次の欠落シーケンスに

gawk '$1!=p+1{print p+1}{p=$1}' 

を見つけるために、それを介してawkのファイルにのみPK今、私の質問は、varchar型の主キーを中心に展開を選択します。シーケンシャルに増加する整数ではありませんが、文字列/ varchar/alphanumericカラムのようなOrder参照番号のように、誰もがこれを試しています。 (A123Z43のような値)、整数/数値でそれは簡単だった、私は1を追加し、私は次のシーケンスを取得します。

私は確信していますが、それはちょうど私を打つ、1つのキーのハッシュと次のことはそれと関係があります。私はそれを試すことができるかどうかわかります。

プライマリキーとして2つの列があり、もう1つが数値で、もう1つがvarcharである場合、これはもっと複雑になります。

私は現時点でSQLサーバとPostgresを使用しています。

答えて

0

PK値が欠落していないことを確認していましたが、シーケンスギャップがあります。 PKのテキストの場合 - のみあなたはデフォルト値のルールを定義することができます。 PK列のデフォルト値がない場合は、ギャップをチェックすることはできません。たとえば、PKに「C12」と「$ D」という2つの値があります - あなたがここで逃したものは何ですか?それはリテラルから始まりますか?数字から?スペースは許されていますか?等々。

何らかの種類のルールが定義されている場合は、generate_serieを作成して結合することができます。ギャップをチェックします。例:

t=# select chr(g)||n,pk from generate_series(65,100,1) g join generate_series(1,9,1) n on true left outer join (values ('A4'),('B3')) as v (pk) on pk=chr(g)||n limit 19; 
?column? | pk 
----------+---- 
A1  | 
A2  | 
A3  | 
A4  | A4 
A5  | 
A6  | 
A7  | 
A8  | 
A9  | 
B1  | 
B2  | 
B3  | B3 
B4  | 
B5  | 
B6  | 
B7  | 
B8  | 
B9  | 
C1  | 
(19 rows) 

Time: 0.392 ms 
関連する問題