MySQL: 将另一个表中的值插入到一个列中

8

我希望使用MySQL将一张表中的数据转移至另一张表。

以下是我目前所用的代码:

INSERT INTO items_rooms (item_id, room_id,x,y,n)  
SELECT id, room_id,x,y,z
  FROM `items_phoenix`

这样做是可行的,但我想把多个值插入到一个列中,而不是每个值插入到不同的列中。

举个例子:

在 items_rooms 表中,我想把 items_phoenix 中的 x 和 y 值放入一个列中。

如果 x = 5,y = 2,我能否像这样将其保存到 items_rooms 中:一个列: 5.2,而不是为每个值建立不同的列?

如果有所困惑,很抱歉!

5个回答

15
你可以在SELECT列清单中使用表达式。只要选择列表中的列和目标表中的列在数量和数据类型上匹配,你可以像这样做:

您可以在SELECT列清单中使用表达式。只要选择列表中的列和目标表中的列在数量和数据类型上匹配,就可以这样做:

INSERT INTO items_rooms (item_id, room_id, x_dot_y, n)  
SELECT id, room_id, CONCAT(x,'.',y), z
  FROM `items_phoenix`

1
这是可能的,因为MySQL不关心指定的类型,并会相应地进行转换。 - tadman

0

对于简单情况,您可以使用连接运算符,例如:

INSERT INTO items_rooms (
  item_id,
  room_id,
  x_and_y,
  n)
SELECT
  id,
  room_id,
  CONCAT(x, '.', y),
  z
FROM `items_phoenix`

Microsoft SQL Server使用 + 来进行字符串连接,但是MySQL则不支持。 - Bill Karwin
不是MySQL专家,所以最初使用了SQL Server语法(@Zaffy,我在最初的编辑中确实有使用+ "." +,因此它不是算术加法)。现已编辑以反映正确的MySQL语法。 - Chamila Chulatunga

0

是的,如果该列可以存储文本信息

只需使用CONCATCONCAT_WS函数连接这些值即可

INSERT INTO items_rooms ( item_id, room_id, my_value, n )
SELECT id, room_id, CONCAT_WS( '.', x, y ), z
FROM `items_phoenix`

SQL Fiddle演示


0
你绝对可以做到这一点。在这里可以看到有用的答案。但是,你应该考虑这是否是一个好主意。一旦你将不同的列合并成某种字符串表达式放在一个列中,你就创造了一些非常难以维护和查询的东西。这样做会使你的数据变得不太可用。

@Joseph:对我来说,这个问题很难回答。一开始我考虑把它作为评论。但是后来我觉得,在这种情况下,SO的指导和辅导方面对于这个问题也很重要。 - DWright

-2
$table_To_Get_From = mysql_query("SELECT * FROM items_phoenix (id, room_id,x,y,z)");
if($table_To_Get_From){
    $table = mysql_fetch_assoc($table_To_Get_From);
    $values = array($table['id'],$table['room_id'],$table['x'],$table['y'],$table['z']);
    mysql_query("INSERT INTO items_rooms (item_id, room_id,x,y,n)  
        VALUES ($values[0],$values[1],$values[2],$values[3],$value[4])");
}

我没有把它们变成字符串,所以你可能需要使用'$values[num]'

如果有任何值,这将像您想要的那样插入它。


3
你如何知道该提问者能使用PHP?如果他使用Delphi、C++或其他语言呢?这个问题只涉及到MySQL。 - Sir Rufo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接