Предполагая, что ваши таблицы структурированы примерно так:
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;