使用另一个表中的值插入数据库行

时间:2011-08-14 01:00:27

标签: mysql select insert-into

基本上,我有两个表:imagesservers。当我想在images表中插入一行时,我需要指定一个s_id作为其中一个字段。问题是,我只有name,这是servers表中的另一个字段。我需要找到s_id属于name的内容,然后在INSERT INTO表格的images查询中使用该内容。

也许这张图片会有所帮助: http://i.imgur.com/rYXbW.png

我只知道name表中的servers字段,我需要使用它来从s_id表中获取servers字段。当我有这个时,我可以在我的INSERT INTO查询中使用它,因为它是一个外键。

我发现了这个: http://www.1keydata.com/sql/sqlinsert.html

但它让我更加困惑。

一种解决方案是运行两个查询。一个用于获取s_id,另一个用于运行插入查询。但是如果有合理的替代方案,我想限制我运行的查询量。

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用INSERT ... SELECT表格,如下所示(当然有真实的列名和值):

INSERT INTO images (s_id, u_id, name, filename, uploaded)
SELECT s_id, ...
FROM servers
WHERE name = 'the name'

我不知道您获取u_id的{​​{1}},namefilenameuploaded列值的位置,但您可以包括它们是images

中的文字值
SELECT

如果INSERT INTO images (s_id, u_id, name, filename, uploaded) SELECT s_id, 11, 'pancakes', 'pancakes.jpg', '2011-05-28 11:23:42' FROM servers WHERE name = 'the name' 不唯一,这种事情会插入多个值。

答案 1 :(得分:0)

你应该可以做这样的事情,但是你需要填写<>中的项目。使用您要插入的值。

INSERT INTO images (s_id, u_id, name, filename, uploaded)
   (SELECT s_id, <u_id>, <name>, <filename>, <uploaded>
   FROM imgstore.servers
   WHERE name = @server_name)

这是SQL Server的语法,但我认为它也适用于MySQL。

这是关于INSERT ... SELECT Syntax

的文章

答案 2 :(得分:0)

请参阅上面关于潜在数据完整性问题的评论。我假设你的服务器表中的name字段有一个唯一的约束。

有两种方法可以解决这个问题INSERT,我确信有些方法比其他方法更好。我没有声称我的方式是最好的方式,但它应该工作。我不知道你是怎么写这个查询的,所以我将使用@FieldValue来表示变量输入。我的方法是在insert语句中使用子查询来获取所需的数据。

INSERT INTO images (field1, field2... s_id) VALUES ('@field1val', '@field2val'... (SELECT s_id FROM servers WHERE name='@nameval'));