0

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

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

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

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

但这让我更加困惑。

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

谢谢!

4

3 回答 3

3

您可以使用INSERT ... SELECT类似这样的表单(当然使用真实的列名和值):

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

我不知道您从哪里获取u_id, name,filenameuploadedcolumn 值,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'

servers.name如果不是唯一的,这种事情将插入多个值。

于 2011-08-14T01:06:20.713 回答
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 语法的文章

于 2011-08-14T01:08:43.273 回答
0

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

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

INSERT INTO images (field1, field2... s_id) VALUES ('@field1val', '@field2val'... (SELECT s_id FROM servers WHERE name='@nameval'));
于 2011-08-14T01:09:08.250 回答