2013-01-09 190 views
5

我想要使用mySQL将项目从一个表移动到另一个表。MYSQL从另一个表中插入值到一列

这是我目前使用:

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

这工作,但我想多值插入到一列中,而不是在不同的列各值。

例如:

在表items_rooms,我想值x和y从items_phoenix被放置到一列中items_rooms。

如果x = 5,y = 2,我可以将它保存到像这样的items_rooms中:一列:5.2代替每个值的不同列吗?

对不起,如果这是混乱!

回答

12

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

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

正是我需要的。谢谢 !! – zuc0001

+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` 
+0

Microsoft SQL Server使用'+'进行字符串连接,但MySQL不。 –

+0

不是MySQL专家,所以最初有SQL Server语法(@Zaffy,我在原始编辑中有'+“。”+',所以它不是算术加法)。编辑以反映正确的MySQL语法。 –

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 DEMO

0

你绝对可以做到这一点。请参阅此处的有用答案。但是,您应该考虑这是否是一个好主意。一旦你将不同的列非规范化为一列中的某种字符串表达式,你就已经创建了一些非常难以维护和查询的东西。这样做会让你的数据对自己的可用性降低。

+2

这应该是一个评论... –

+0

@约瑟夫:很难说这一个,对我来说。我考虑将它作为评论。但后来我觉得在这种情况下,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])"); 
} 

我并没有使他们的字符串,所以你可能需要使用“$值[NUM]”

这将插入它就像你想,如果有任何价值。

+0

这应该工作。 –

+3

你怎么知道OP可以使用PHP?如果他使用Delphi,C++或其他什么呢?这个问题只是关于MySQL –

相关问题