让我们在我的代码中说,我有用户名和值。现在,我需要将其保存在db中,但我需要首先获得与该用户名称相对应的ID,因为该表与pk/fk链接到users表。我该怎么做呢?我知道您可以执行INSERT (blah) 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')
谢谢
发布于 2010-08-05 02:32:57
你可能在找这个?:
insert into myDestTable (userid, name, value, othercolumns)
select us.userid, us.name,'myvaluefromcode', othercolumns
from users us
where us.name = 'mynamefromcode'发布于 2010-08-05 02:33:27
没有必要直接抄袭。只需使select语句的结果与目标表的列匹配即可。
例如:
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发布于 2010-08-05 02:45:33
假设表是结构化的,如下所示:
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;https://stackoverflow.com/questions/3411339
复制相似问题