SQL SELECT和INSERT语句在一起

时间:2012-01-11 03:54:06

标签: sql select insert

如果我有一个名为地方的表,其中包含多个字段和一个主键placeID,那么将新项目插入表格的最佳方法是什么,例如placeID是自动增加的,但所有其他字段与placeID = 001的项目相同,比如说。

这就是我正在做的事情

 SELECT* FROM Places WHERE placeID = 001 ... 
 INSERT INTO Places VALUES(...should be values from previous select)

但我无法弄明白该怎么做。

2 个答案:

答案 0 :(得分:4)

您只需将其向后移动,并且需要明确命名列,每个列 placeID列表中除 SELECT之外:

INSERT INTO places (col1, col2, col3, col4, every_column_except_placeID)
  SELECT col1, col2, col3, col4, every_column_except_placeID FROM Places WHERE placeID='001'

您应该获得placeID自动递增的新行。

答案 1 :(得分:0)

如果在一个SQL语句中看起来像一团糟,那么我将其分解并使用更多资源。对于需要挤压每一滴性能的大型网络应用程序 - 这是一个糟糕的解决方案。

然而,大多数情况下,对于要求不高的情况,一个很好的视觉逻辑过程就可以了。

我会选择我的信息,并使用更高级语言的内部循环将结果删除到insert语句中。我不会因为制作更多插页而受到惩罚。在许多共享主机上,您可以在一段时间内对多少查询进行限制,因此您可能需要构建更少但更大的插入语句。

为此,我可能会使用PHP来处理我的数据和SQL,我确信以下内容可以适用于您想要使用的任何语言。

<!php
$placeid=001

$sql1="SELECT column,othercolumn,maybeasterisk FROM table1 WHERE PlaceID=$placeid";
$sql2="INSERT into table2 (column,othercolumn,thirdcolumn,whymore,so-on) VALUES ('$data1a','$data1b','$data1c','$data1d','$data1e')";
$sql3="INSERT into table2 (column,othercolumn,thirdcolumn,whymore,so-on) VALUES $bigstring";

$counter=0;

$result1=mysql_query($sql1);
while ($resultrow1=mysql_fetch_array($result1)) {

$data1a=$resultrow1['1'];
$data1b=$resultrow1['2'];
$data1c=$resultrow1['3'];
$data1d=$resultrow1['whymore'];
$data1e=$resultrow1['so-on'];    

if ($abillioninsertsareokay='true') {
mysql_query($sql2);
}

else {
//a billion inserts isn't okay
//build an array that we can use in a separate loop
for ($i=0, $i<=5, $i++) {
$sql3arraydata['$counter']['$i']
$counter++
}

}

$counter=0;

if ($abillioninsertsareokay!='true') {
foreach $sql3arraydata['$counter'] {

if ($counter>0) {
$bigstring.=', ';
}

$bigstring.="('$sql3arraydata['$counter'][1]','$sql3arraydata['$counter'][2]','$sql3arraydata['$counter'][3]','$sql3arraydata['$counter'][4]','$sql3arraydata['$counter'][5]')";
}

mysql_query($sql3); //one huge insert statement

}

?>

It may be the wrong way to look at things, but sometimes you just have to crank out mediocre code that works to get the job done. Yes, that would be great if you had all the time in the world to make it super awesome, but if this is the kind of question you are asking-- probably not a mission critical system for a mass amount of people.