【问题标题】:Inserting database row with values from another table使用另一个表中的值插入数据库行
【发布时间】:2011-08-14 01:00:27
【问题描述】:

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

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

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

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

但这让我更加困惑。

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

谢谢!

【问题讨论】:

  • name 字段是否有唯一约束?如果不是,那么您肯定会遇到数据完整性问题(无论您采用何种方法)。

标签: mysql select insert-into


【解决方案1】:

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

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

我不知道您从哪里获得 u_idnamefilenameuploaded 列值 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 不是唯一的,这种事情会插入多个值。

【讨论】:

    【解决方案2】:

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

    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的文章

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-10
        • 2022-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多