插入行时选择第二个外键

时间:2011-08-20 20:46:51

标签: mysql sql select insert-into

INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded)
SELECT s_id, ?, ?, ?, ?, ?
FROM servers
WHERE name = ?

当用户将图像上传到我的网站时,我正在使用此SQL语句。 s_id字段是servers表的外键,字段u_idusers表的外键。我想通过用户名(总是唯一的)从users表中选择用户ID(u_id),并在此insert语句中使用它。

我已经完成了选择服务器ID(s_id)的部分,但这非常侥幸和搞乱。我不太确定如何使这个查询适应两个select语句?

感谢您的支持,谢谢!

4 个答案:

答案 0 :(得分:0)

INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded)
SELECT (select s_id from servers where name=?') as s_id, 
(select user_id from users where username=?) as user_id, 
?, ?, ?, ?;

答案 1 :(得分:0)

尝试:

DECLARE userID int
SELECT u_id FROM users into userID
WHERE useranem = ?

然后在INSERT中使用useriD变量。我是SQL Server用户,而不是MySQL,但从我读到的内容来看,我认为我的语法正确。

答案 2 :(得分:0)

我更喜欢这样的东西,以便你获得两个独特的索引扫描,这就是结束;只要表在唯一键和您希望返回的值上唯一索引。

insert into 'images' (s_id, u_id, name, filename, filesize, uploaded)
select ( select s_id
           from servers
          where name = ? )
     , ( select u_id
            from users
           where username = ? )
     , 'name'
     , 'filename'
     , 'filesize'
     , 'uploaded'
  from dual;

答案 3 :(得分:0)

我想知道为什么没有人提到

INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded)
SELECT s_id, u_id, ?, ?, ?, ?
FROM servers JOIN users 
WHERE name = ? AND username = ?

这是一个无条件的连接,但它应该只产生一行,给定的服务器和用户。