请问一下这样的sql目的能否实现

hi

我有一个这样的问题,大家帮忙看看能不能实现。谢谢了先。

1,从数据库中若干表中select除我想要得结果(业务逻辑)
2,将结果直接扔到新的表中

据个例子

SQL code

select t1.col1*2 as newCol1, t2.col2*3 as newCol2 from t1, t2 where .....

-- 然后把结果存入新的表中,newTable我可以建好,直接使用 
insert into newTable (上面的newcol1, newcol2);



我以前都是通过编程语言达到这个效果,拿到结果集然后再次建立连接,判断是否还有下一条,然后一条一条插入newtable
不知道能不能直接就用sql直接完成所有的操作?这样我的编程语言只需要调用一次上面的sql语句就完成了所有的任务。

谢谢

作者: rockay2006   发布时间: 2011-05-09

Insert into newTable Select t1.col1*2 as newCol1, t2.col2*3 as newCol2 from t1, t2 where ..... ;

作者: ACMAIN_CHM   发布时间: 2011-05-09

这个INSERT ... SELECT语法 在MYSQL的免费官方手册中就有介绍。

引用13.2.4.1. INSERT ... SELECT语法
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
使用INSERT...SELECT,您可以快速地从一个或多个表中向一个表中插入多个行。

示例:

INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
使用INSERT...SELECT语句时会出现以下情况:

· 明确地指定IGNORE,用于忽略会导致重复关键字错误的记录。

· 不要同时使用DELAYED和INSERT...SELECT。

· INSERT语句的目标表会显示在查询的SELECT部分的FROM子句中。(在有些旧版本的MySQL中不会出现这种情况。)

· AUTO_INCREMENT列照常运行。

· 为了确保二进制日志可以被用于再次创建原表,MySQL不允许在INSERT...SELECT运行期间同时进行插入操作。

· 目前,您不能在向一个表插入的同时,又在一个子查询中从同一个表中选择。

在ON DUPLICATE KEY UPDATE的值部分中,只要您不使用SELECT部分中的GROUP BY,您就可以引用在其它表中的列。有一个副作用是,您必须使值部分中的非唯一列的名称符合要求。

您可以使用REPLACE替代INSERT,来覆盖旧行。对于包含唯一关键字值,并复制了旧行的新行,在进行处理时,REPLACE可以作为INSERT IGNORE的同类子句:新行被用于替换旧行,而不是被丢弃。

作者: ACMAIN_CHM   发布时间: 2011-05-09

insert into newTable (col1, col2)
select t1.col1*2 as newCol1, t2.col2*3 as newCol2 from t1, t2 where .....

作者: wwwwb   发布时间: 2011-05-09

恩,在SQL中直接完成,就可以放到程序里

作者: rczjp   发布时间: 2011-05-09