0

pat_authors という 2 つの列を持つテーブルがあります。last_name、first_initials という 2 つの列の異なる組み合わせを選択したいと考えています。次のコマンドは、正しい情報を取得するために機能します。

select distinct last_name, first_initials from pat_authors;

ただし、同じ情報を取得して、unique_authors という名前の別のテーブルに挿入したいと考えています。unique_authors には、authorID、last_name、first_initials の 3 つの列があります。

私は非常に多くのバリエーションのコードを試しましたが、夢中になっています。正しい試みであることに最も近いと私が考えた2つは次のとおりです。

select distinct author_last_name, author_initials into uniqueauthors from pat_authors;

エラーが発生しました-1327:undeclared variable: uniqueauthors

私も試してみました

insert into uniqueauthors select distinct author_last_name, author_initials from pat_authors;

ここで私はError Code: 1136. Column count doesn't match value count at row 1.大丈夫だと思ったauthorIDNOT NULL AUTO_INCREMENT

4

2 に答える 2

1

機能しない理由は、INSERTステートメントがSELECT. 対象の列を明示的に指定する必要がありますINSERT

INSERT INTO uniqueauthors (last_name, first_initials)
SELECT DISTINCT author_last_name, author_initials
FROM pat_authors

または、列の指定を暗黙のままにしておくこともできます。SELECTただし、これを行う場合は、テーブル定義に列があるため (自動インクリメント列を含めても)、同じ数の列が (一致する順序で) あることを確認する必要があります。どうすれば列の自動インクリメントを維持できますか? NULLの最初の列として単純に指定できますSELECT

INSERT INTO uniqueauthors 
SELECT DISTINCT NULL, author_last_name, author_initials 
FROM pat_authors

役立つヒント:NULL自動インクリメント列に値を挿入しようとすると、代わりに自動インクリメントされた値が挿入されます。

于 2012-07-17T22:38:11.890 に答える
0

すべての列を使用しない場合は、使用する列を指定する必要があります

insert into uniqueauthors(last_name, first_initials) select distinct author_last_name, author_initials from pat_authors;

または、すべての列に値を設定するだけです

insert into uniqueauthors select null, author_last_name, author_initials from pat_authors GROUP BY author_last_name, author_initials;
于 2012-07-17T22:39:32.223 に答える