首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SELECT从SELECT

SELECT从SELECT
EN

Stack Overflow用户
提问于 2010-08-05 02:29:34
回答 3查看 808关注 0票数 0

让我们在我的代码中说,我有用户名和值。现在,我需要将其保存在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')

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-05 02:32:57

你可能在找这个?:

代码语言:javascript
复制
insert into myDestTable (userid, name, value, othercolumns)
select us.userid, us.name,'myvaluefromcode', othercolumns
from users us 
where us.name = 'mynamefromcode'
票数 5
EN

Stack Overflow用户

发布于 2010-08-05 02:33:27

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

例如:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2010-08-05 02:45:33

假设表是结构化的,如下所示:

代码语言:javascript
复制
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映射不会在您下面更改,您必须以原子的方式进行此操作。换句话说,你不能:

代码语言:javascript
复制
get user_id from users based on user_name.
insert value and user_id into other_table.

由于user_id或user_name在上述两个步骤之间可能会发生变化(对于物理行,user_id可能不会更改,但是表可能会从以下位置更改:

代码语言:javascript
复制
user_id  user_name
-------  ---------
1        bob
2        george

至:

代码语言:javascript
复制
user_id  user_name
-------  ---------
1        george
2        bob

因此,要进行原子化操作,它必须位于单个SQL语句中(或者是事务的一部分,但在本例中可以避免事务):

代码语言:javascript
复制
insert into other_table (user_value, user_id)
    select :value, user_id from users where user_name = :name;

对于您的具体情况(在我最初的回答之后添加),您将看到:

代码语言:javascript
复制
insert into AvatarTable (UserID,AvatarURL)
    select UserID, :localAvatarURL
    from UserTable
    where UserName = :localUserName;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3411339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档