让我们在我的代码中说我有用户名和值。现在我需要将其保存在数据库中,但我需要首先获取与该用户名对应的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')
由于
答案 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;