Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用其他表中的值插入数据库行_Mysql_Select_Insert Into - Fatal编程技术网

Mysql 使用其他表中的值插入数据库行

Mysql 使用其他表中的值插入数据库行,mysql,select,insert-into,Mysql,Select,Insert Into,基本上,我有两个表:图像和服务器。当我想在images表中插入一行时,我需要指定一个s_id作为其中一个字段。问题是,我只有name,这是servers表中的另一个字段。我需要找到s_id属于name的内容,然后在images表的INSERT INTO查询中使用它 也许这张图片会有帮助: 我只知道servers表中的name字段,我需要使用它从servers表中获取s_id字段。当我有了它,我可以在INSERT INTO查询中使用它,因为它是一个外键 我发现: 但这让我更加困惑 一种解决方案

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

也许这张图片会有帮助:

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

我发现:

但这让我更加困惑

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

谢谢

您可以使用插入。。。选择表单,类似这样的表单,当然有真实的列名和值:

INSERT INTO images (s_id, u_id, name, filename, uploaded)
SELECT s_id, ...
FROM servers
WHERE name = 'the name'
我不知道您从何处获取图像的u_id、名称、文件名或上载列值,但您可以将它们作为文字值包含在选择:


如果servers.name不是唯一的,这类操作将插入多个值。

您应该能够执行类似的操作,但您需要用要插入的值填充中的项目

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


这是一篇关于

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

有两种方法可以实现此插入,我相信有些方法比其他方法更好。我不认为我的方式是最好的方式,但它应该有效。我不知道您是如何编写这个查询的,所以我将使用@FieldValue来表示变量输入。我的方法是在insert语句中使用子查询来获取所需的数据

INSERT INTO images (field1, field2... s_id) VALUES ('@field1val', '@field2val'... (SELECT s_id FROM servers WHERE name='@nameval'));
名称字段是否具有唯一的约束?如果不是,那么无论采用何种方法,您都肯定会遇到数据完整性问题。
INSERT INTO images (field1, field2... s_id) VALUES ('@field1val', '@field2val'... (SELECT s_id FROM servers WHERE name='@nameval'));