2012-02-18 7 views
0

基本的に、私は "host"という名前の列を含むdocumentという表を持っています。私は "rev_host"という名前の別の列を作成しました。私が望むのは、 "host"から "rev_host"への逆の文字列を格納することだけです。たとえば、 "host"の値が "www.cmu.edu"の場合、 "ude.umc.www"を "rev_host"に保存します。MySQL INSERT SELECT文がスローされるエラー1062:キー2の重複エントリ ''

ERROR 1062 (23000): Duplicate entry '' for key 2 

この文の問題はどのようなものです:私は、この文は、1062エラーがスローされます

INSERT INTO document (rev_host) SELECT REVERSE(host) from document; 

ステートメントを使用しますか?私はこの方法で挿入できない場合。この挿入を行う正しい方法は何ですか?

+0

、何が特にオリジナルの「www.cmu.edu」というに基づいて反転した文字列を使用してからあなたを禁止しています別のテーブルを使用するよりも?変換が常に一貫している場合(REVERSE)、必要なときにREVERSEを実行するだけで、余分なストレージと挿入を省くことができます(選択など)。これは、 "あなたが計算できるものを保存しない"という練習に従います。 – hexparrot

答えて

2

クエリでは、テーブルに新しい行が挿入され、重複するキーが導入されます。あなただけの1列を更新しておきたい場合は、あなたの以前のエントリではなくUPDATEを使用します。好奇心のうち

UPDATE document SET rev_host=REVERSE(host); 
+0

あなたの答えをありがとう。実際に私はほとんどそこにいた、私は以下の文を使用していた:UPDATE document SET rev_host =(SELECT REVERSE(host)FROM document); 「構文ミス」エラーが発生しました。あなたの答えは本当にうまくいく! – fanchyna

関連する問題