2016-07-28 18 views
2

質問、なぜこのように機能しないのですか?異なる列数の別のテーブルからテーブルに挿入する(MySql)

create table one (a int(1) default 1, b int(2)); 

create table two (b int(1)); 

insert into one select * from two; 

エラー:

Column count doesn't match value count at row 1 

数えることができますが、なぜ、は哲学的、それを知っていますか? データベースは、テーブルtwoの列を挿入する名前がbであることを知っており、テーブルoneaのデフォルト値は1です。 なので、このクエリを実行する際の問題は何ですか?

一般的な方法 - これは不可能な場合は、列とその数の情報なしに、手動ではなく別の方法でこれを行うことができますか?

私はこれを知っている: テーブルtwoは常にテーブルoneを持っていること、すべて同じ列を持っています。しかし、表oneには別の列もあり、デフォルト値があります。

これを実行する方法はありますか? twoのすべてのデータをoneに挿入し、残りの列にいくつかのデフォルト値またはその他の値を入力してください。

ヘルプが必要です。 ありがとうございました!

+0

(b)を2つから選択してください。 – SIDU

答えて

2

あなたが実行すると:

insert into one 
    select * from two; 

をSQLエンジンが自動的に暗示されている列に置きます。

  • insertの場合、これは宣言順の列のリストです。
  • *の場合、これは宣言順の列のリストです。

名前による列の「一致」はなく、各表の列のリストのみがあります。

ので、クエリが本当にある:

私にはエラーのように見えます
insert into one(a, b) 
    select b from two; 

ストーリーのモラル?あなたが意図するコードを書いてください。特にinsertステートメントの場合は、列リストを常に含めます。したがって、次のように書いてください。

insert into one(b) 
    select b from two; 
+0

ありがとうございます。という事は承知しています。 しかし、これは、**同じ**列の名前を常に知っている必要があることを意味します。**両方の表にそれらがあるため、**自動的に挿入する必要があります**。なぜ私はこの名前をマニュアルにしなければならないのですか? ok ... データベースのリレーショナル理論では非常に奇妙です。 そして最終的に - このタスクは** SQLで解決できませんか? 最小限のプログラミングで、SQLを最大限に活用するのは簡単な方法でしょうか?列の名前 - 私はそれらを知りませんでした。テーブル 'one'にはテーブル' two'と同じカラムがあり、カラムにはデフォルト値があります。 ありがとうございます! – dmitryck

+0

PS。私はいくつかの追加プログラミングで、このタスクをやったことがあります。答えは「答えを1つ(b)を2つから選択する」です。 – dmitryck

関連する問題