2012-03-08 17 views
4

から値を置き換えます。MySQLは、私はこのようになります私のデータベース内のテーブル持っている各レコードの

=========を
| id |コード|
=========
| 1 | |
=========
| 2 | e |
=========
| 3 | r |
=========

のように。アルファベットのどの文字がではなく、テーブル内のであるかを教えてくれるクエリを実行できるようにしたいと考えています。

私はもともとこのようなクエリを考えていた:

SELECTは( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' を、(表からコードを選択)、 '')REPLACE;

とそれが出力する「defghijklmnopqrstuvwxyz」だろう、と私は未使用の文字の配列にその爆発可能性が望ん。残念ながら、MySQLのREPLACEでは値のテーブルを使用することはできません。

このリストを作成する方法上の任意の提案?

+0

My MySQLは少し錆びていますが、それは良い質問です。私は何かを「WHERE NOT IN(SELECT code FROM table)」と組み合わせることから始めたいと思います。 –

+0

@DerekTomesこれは私が元々考えていたものです。残念なことに、 "FROM"テーブルのアルファベット全体を別の静的テーブルにする必要があります。私は即時のテーブル( 'a'、 'b'、 'c' ...)を作成しようとしましたが、FROMフィールドにその構文は許可されていません – jwegner

+0

なぜそれが必要ですか? –

答えて

1

それは簡単LEFT付きの文字を削除するにはなるだろう、私はは、それがアルファベットの各文字の行を持つテーブルを作成することで行うことをお勧めする方法は、最後に登録しようとGROUP_CONCAT。

このテーブルが不足していると、テンポラリ変数と文字数よりも多くの行を持つテーブルの間にJOINを使用して一時的な "アルファベットテーブル"を作成する必要があります。この例では、INFORMATION_SCHEMA.COLLATIONSを使用します。

SELECT GROUP_CONCAT(CHAR(ch) SEPARATOR '') 'missing letters' FROM 
    (SELECT @tmp:[email protected]+1 ch 
    FROM (SELECT @tmp:=96) a, INFORMATION_SCHEMA.COLLATIONS 
    WHERE @tmp<122) z 
LEFT JOIN TableA ON ch=ORD(TableA.code) 
WHERE TableA.code IS NULL; 

ネストされたSELECTは、アルファベット順を構築し、LEFT JOINはテーブルAに存在する文字(あなたのテーブル)を削除します。 GROUP_JOINは結果の文字を連結します。結果は、TableAには存在しないすべての文字を含む文字列です。

0

サーバー側でロジックを構築します。使用されているすべての文字(別名)を取得するためのクエリを作成し、結果セットを処理し、使用可能な配列/文字列から使用された文字をクリアします。

+0

可能な答えは、おそらく私がしなければならないことです。理想的な状況はSQL問合せから行うことですが、これで十分です。 – jwegner

+0

あなたはSQLでそれを行うことができます:テンポラリテーブルを作成してすべての可能な文字を作成するストアドプロシージャを作成し、結果を得るための単純なクエリを作成するだけです。 –

関連する問題