Kак правильно использовать входные данные во вставке?

Как можно использовать входные данные для заполнения ячеек?

Вот мой запрос:

INSERT INTO storage_deposits (user_id, user_name, cashier) VALUES (
    '781776587', 'MrParabellum888', (
        SELECT storage_requests.club_nick 
        FROM storage_requests 
        WHERE storage_requests.username = user_name));

Мне нужно заполнить ячейку cashier данными из таблицы storage_requests, если в столбце username есть user_name, который имеет значение MrParabellum888.


Ответы (1 шт):

Автор решения: 0xdb

Вот тут:

[...] WHERE storage_requests.username = user_name
                                    ----^^^^^^^^^

столбец user_name в подзапросе неизвестен и будет получена ошибка:

Unknown column 'user_name' in 'where clause'

Надо указать напрямую значение:

[...] WHERE storage_requests.username = 'MrParabellum888'

Посмотрите на воспроизводимом примере, как можно сделать:

create table t1 (id integer, t2id integer, name varchar(8));
create table t2 (id integer, name varchar(8));
insert into t2 values (1, 't2 name1');
insert into t2 values (2, 't2 name2');

insert into t1 (id, t2id, name) 
    values (1, 1, (select name from t2 where t2.id = t2id)); 
Unknown column 't2id' in 'where clause'

insert into t1 (id, t2id, name) 
    values (1, 1, (select name from t2 where t2.id = 2));

insert into t1 (id, t2id, name) 
    select 2, id, name from t2 where t2.id = 2;
 
select * from t1;

id  t2id  name
--  ----  --------
 1     1  t2 name1
 2     2  t2 name2
→ Ссылка