基本上,我有两个表:images
和servers
。当我想在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
,另一个用于运行插入查询。但是如果有合理的替代方案,我想限制我运行的查询量。
谢谢!
答案 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}},name
,filename
或uploaded
列值的位置,但您可以包括它们是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。
的文章答案 2 :(得分:0)
请参阅上面关于潜在数据完整性问题的评论。我假设你的服务器表中的name字段有一个唯一的约束。
有两种方法可以解决这个问题INSERT
,我确信有些方法比其他方法更好。我没有声称我的方式是最好的方式,但它应该工作。我不知道你是怎么写这个查询的,所以我将使用@FieldValue
来表示变量输入。我的方法是在insert语句中使用子查询来获取所需的数据。
INSERT INTO images (field1, field2... s_id) VALUES ('@field1val', '@field2val'... (SELECT s_id FROM servers WHERE name='@nameval'));