2017-02-13 10 views
1

私は2つのテーブルを持っています。 一時テーブル:あるテーブルから別のテーブルにデータを挿入し、新しい値を追加する

CREATE TABLE IF NOT EXISTS `temporary` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `FK_user` int(11) NOT NULL, 
    `FK_bin` varchar(50) NOT NULL, 
    `orderDate` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=35 ; 

とOrdersテーブル:uniqid(rand())

CREATE TABLE IF NOT EXISTS `orders` (
    `id` int(11) NOT NULL, 
    `FK_user` int(11) NOT NULL, 
    `FK_bin` varchar(50) NOT NULL, 
    `orderNumber` varchar(11) NOT NULL, 
    `orderDate` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

私は、Ordersテーブルに一時テーブルのすべての値を挿入し、これを手動で注文番号を追加します。

私はどのように行うことができます...

私はINSERT INTO orders SELECT * FROM temporary WHERE FK_user = ? を使用しましたが、注文番号が一時テーブルに存在しないため、彼らは動作しませんか?

+1

問題は表示されません。ただ、一時的なトンから注文番号、t.orderDateとして選択 'ORDERS。INSERT INTO(ID、FK_user、FK_bin、orderNumer、orderDateで)SELECT t.id、t.FK_user、t.FK_bin、UUID()の列を指定する;' – Rumpelstinsk

+1

'SELECT *'は使わないでください。挿入文と選択文の両方の各列名を記述してください... – Naga

答えて

4

私が正しくあなたのquestioinを理解願ってください。私は以下のクエリが役立つと思います。

INSERT INTO orders(id , FK_user , FK_bin , orderNumber , orderDate) 
(SELECT id , FK_user , FK_bin , uniqid(rand()) AS orderNumber , orderDate 
FROM temporary WHERE FK_user = ?); 

上記のクエリで説明したように、select文で注文番号を生成する関数を使用してください。

+0

ありがとう、それは仕事です、私は質問があります: "as"はuniqid変数をorderNumber列に接続することですか? – Rocstar

+1

関数の値にエイリアスを与えるために使用されます。この場合、別名orderNumberをuniqid(rand())に指定しています。 – Tajinder

関連する問題