2017-11-06 11 views
0

ずつインクリメント値のいずれかでMySQLのテーブルに新しいレコードを挿入:私は、次の表を持っている1

productId  price 
1    price_value1 
2    price_value2 
3    price_value3 

私はテーブルに新しい製品を挿入し、新しいそれを割り当てたいです製品番号。だから、私の知る限り理解し、実行するために、私は何とかPRODUCTIDの最大値を取得するために持っていることを

productId price 
1   price_value1 
2   price_value2 
3   price_value3 
4   price_value4 

:この場合、その値は、だから私は私の新しいテーブルにはそう見えるようにしたい4. に等しいですINSERT INTO mytable VALUES (productId + 1, price_value4)を使用して挿入します。 しかし、productIdの最大値を調べるにはどうすればよいですか? 私はINSERT INTO mytable VALUES (SELECT MAX(productId) + 1 FROM mytable, price_value4)を試しましたが、動作しませんでした。

答えて

0

この作業をする必要があります:

はmytableはから列として最大(のproductID)とprice_value4を選択し、その結果を挿入します。

あなたはあなただけのPRODUCT_IDすると、あなたは価格だけを挿入する必要があります自動インクリメントIDキーを追加することができ、いくつかの番号をジャンプするつもりはない場合は、プロダクトIDが自動的にインクリメントされます
INSERT INTO mytable (SELECT MAX(productId) + 1, 'price_value4' FROM mytable); 

.. これは、そうします:

ALTER TABLE mytable 
MODIFY COLUMN `productId` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT; 

あなたはINT(10)INTを変更することができます(5)あなたがあなたのProductID列に与えたいサイズにdepanding例えば

EDIT:彼のソリューションは 一部suggetionsを働かない理由をコメント欄にOPの質問への見返りとして

は、あなたが私の場合、それは

を返します。..いつもカッコ

INSERT INTO mytable VALUES ((SELECT MAX(ID)+1 FROM mytable) , price_value4) 

間のインサートでSELECTなステートメントをしなければならないと言います

(1093):あなたは、FROM句

に更新のための 'my​​tableは' ターゲット表 を指定することはできません AND HERE IS WHY(ドキュメントから引用)

から選択し、同じテーブルに挿入する場合、MySQLはSELECTから行を保持するため 内部一時テーブルを作成し、ターゲットテーブルにこれらの行を挿入 。 tはTEMPORARYテーブル、 ときに一時テーブルを参照することができないので、しかし、あなたはTから... SELECT ...トンINTO INSERTを使用することはできません二度同じ 文で

しかしがあるにFROMのテーブル自体の代わりにクエリを使用することで克服することができます。これは、更新するテーブルの参照ではなく、要求されたテーブルの値をコピーするという効果があります。

INSERT INTO mytable VALUES ( 
    (SELECT MAX(ID)+1 FROM (SELECT * FROM mytable) as mytmp), 
    'price_value4'); 

OR

選択および INSERTが同じテーブルを参照する場合、あいまいな列参照問題を回避するために使用される各テーブル の一意のエイリアスを提供する(ドキュメントから引用) SELECTパーツを作成し、そのパーツの列名を 適切な別名で修飾します。

INSERT INTO mytable Values ((SELECT MAX(ID)+1 FROM mytable as mytmp) , 'price_value4') 
+0

私はmytable' FROMこの部分 'price_value4を理解していないが、price_value4はテーブルではありません。そしてそれは構文エラーをもたらします。 – codeFish

+0

'price_value4'はあなたが挿入したい価格なので、基本的に' 5または6. 'のような値か 'price_value4、price_value5 ...'という言葉を 'select productID' 5 'from mytable'構文エラーは返されません – AnouarZ

+0

hmm strangeですが、構文エラーが返されます。関連性が高いようですが、私はMariaDBを使用しています。それは何かを変えますか?私はprice_value4に続いて 'FROM mytable'のポイントを理解していません。あなたはそれを説明してもらえますか? – codeFish

0

これは重複して質問です。列の自動インクリメント機能を利用するには、行を挿入するときにその列の値を指定しないでください。 提供されるデフォルトを挿入しながらテーブル

CREATE TABLE Product (
    productId MEDIUMINT NOT NULL AUTO_INCREMENT, 
    price INT NOT NULL, 
    PRIMARY KEY (productid) 
); 

を作成するか、またはNULLとして空白または供給値としてカラムを残すための簡単な構文。以下のコードスニペットを見てください。

INSERT INTO Product (price) VALUES 
    ('10'),('20'),('4'), 
    ('30'); 

refer this link

+0

これは、テーブルがすでに作成されていることです。私はそれを作成することはできません。 – codeFish

+0

これを試してください。 INSERT INTO製品(製品ID、価格) SELECT MAX(製品ID)+1、値段 から 製品 –

+0

このリンクを参照すると、回答が得られるかもしれません。私は自分のローカルにMySQLをインストールしていません。私は試していない、それがあなたのために働くかどうか私に知らせてください。 https://stackoverflow.com/questions/25615897/can-we-use-aggregate-functions-in-insert-query-with-more-than-one-column-values –

関連する問題