SELECT的SQL INSERT

时间:2010-08-05 02:29:35

标签: mysql c#-4.0

让我们在我的代码中说我有用户名和值。现在我需要将其保存在数据库中,但我需要首先获取与该用户名对应的ID,因为此表将pk / fk链接到users表。我该怎么做? 我知道你可以做一个INSERT(等等)SELECT等来做它但看起来像一个直接的副本,我需要插入一个带有fk列的值作为SELECT的结果。

  

用户表:   [UserID(pk),UserName]

     

头像表:   [UserID(fk),AvatarURL]

我需要 INSERT INTO AvatarTable(UserID, AvatarURL) VALUES (*id of user where UserName = 'theirname'*, 'http://www.blah.com')

由于

3 个答案:

答案 0 :(得分:5)

你可能正在寻找这个?:

insert into myDestTable (userid, name, value, othercolumns)
select us.userid, us.name,'myvaluefromcode', othercolumns
from users us 
where us.name = 'mynamefromcode'

答案 1 :(得分:0)

没有必要直接复制。只需使select语句的结果与目标表的列匹配即可。

e.g。

insert into NEW_TAB(user_name, order_id) 
select u.user_name, o.order_id 
from ORDER o
inner join USER u
  on o.user_id = u.user_id

答案 2 :(得分:0)

假设您的表格结构如下:

users:
    user_id           integer
    user_name         varchar(50)
    user_other_data   varchar(999)
    primary key       (user_id)
    unique            (user_name)
other_table:
    user_value        varchar(999)
    user_id           integer foreign key (users.user_id)

您想要的是只在给定值和用户名的情况下将条目插入other_table的能力。

以原子方式执行此操作非常重要,以确保在您下方不会更改user_id / user_name映射。换句话说,你做不到:

get user_id from users based on user_name.
insert value and user_id into other_table.

因为user_id或user_name可能在上述两个步骤之间发生变化(对于物理行,user_id可能不会改变,但表格当然可能会改变:

user_id  user_name
-------  ---------
1        bob
2        george

为:

user_id  user_name
-------  ---------
1        george
2        bob

因此,要以原子方式执行,它必须位于单个SQL语句中(或者是事务的一部分,但在这种情况下可以避免事务):

insert into other_table (user_value, user_id)
    select :value, user_id from users where user_name = :name;

对于您的具体案例(在我的原始答案之后添加),您正在查看:

insert into AvatarTable (UserID,AvatarURL)
    select UserID, :localAvatarURL
    from UserTable
    where UserName = :localUserName;