2017-02-13 135 views
1

我有两个表。 临时表:将数据从一个表插入另一个表并添加新值

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 ; 

和订单表:

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表以及与此手动添加订单编号:uniqid(rand())

我使用INSERT INTO orders SELECT * FROM temporary WHERE FK_user = ? 但由于订单编号不临时表存在,他们没有工作......

我可怎么办?请

+1

我在那里看不到问题。只需在选择的INSERT INTO ORDERS(id,FK_user,FK_bin,orderNumer,orderDate)上指定列即可。SELECT t.id,t.FK_user,t.FK_bin,UUID()as orderNumber,t.orderDate from temporary t;' – Rumpelstinsk

+1

不要使用'SELECT *'。在insert into和select语句中提及每个列名... – Naga

回答

4

希望我能正确理解你的问题。我认为以下查询将有所帮助。

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

相关问题