как выполнить коррелированную операцию запроса в sqlite

Я пытаюсь обновить таблицу sqlite со значениями, взятыми из другой таблицы, но при условии совпадения значения в ключевом поле, но не могу понять, как это сделать.

В postgres я могу использовать «коррелированный запрос», как показано ниже

drop table if exists zzzz_tab_1;
drop table if exists zzzz_tab_2;
drop table if exists zzzz_tab_3;

create table zzzz_tab_1 (nr int , x_names varchar(20));
create table zzzz_tab_2 (nr int , x_age int);
create table zzzz_tab_3 (nr int , x_names varchar(20), x_age int);

INSERT INTO zzzz_tab_1 (nr, x_names) VALUES (1, 'AB');
INSERT INTO zzzz_tab_1 (nr, x_names) VALUES (2, 'BA');
INSERT INTO zzzz_tab_1 (nr, x_names) VALUES (3, 'CD');

INSERT INTO zzzz_tab_2 (nr, x_age) VALUES (1, 10);
INSERT INTO zzzz_tab_2 (nr, x_age) VALUES (3, 20);

-- add values 

-- add nr from zzzz_tab_1
insert into zzzz_tab_3 (nr) select nr from zzzz_tab_1;
--adding names from zzzz_tab_1
update zzzz_tab_3 
set 
  x_names = t1.x_names 
  from (select nr, x_names from zzzz_tab_1) as t1 
  where zzzz_tab_3.nr = t1.nr;
--adding age from zzzz_tab_2
update zzzz_tab_3 
set 
  x_age = t1.x_age 
  from (select nr, x_age from zzzz_tab_2) as t1 
  where zzzz_tab_3.nr = t1.nr;

select * from zzzz_tab_3;  

Но это, похоже, не работает в sqlite.
Я попробовал следующий код, основанный на ответе здесь, но он также не работает.

with tx1
as
(select nr, x_names from zzzz_tab_1)
replace into 
zzzz_tab_3
select 
zzzz_tab_3.nr, zzzz_tab_3.x_names
from zzzz_tab_3
inner join tx1 on tx1.nr = zzzz_tab_3.nr 

Возможна ли эта операция вообще в sqlite ?

— Очищение —

В основном у меня есть две таблицы zzzz_tab_1 и zzzz_tab_3

zzzz_tab_1

nr  x_names
1   AB
2   BA
3   CD

zzzz_tab_3

nr  x_names
1    null
2    null       
3   null 

Я хочу добавить данные из zzzz_tab_1 в zzzz_tab_3
на основе значения поля
результат (zzzz_tab_3) должен быть

zzzz_tab_3

nr  x_names
1   AB  
2   BA  
3   CD  

P. S: можно создать новую таблицу с join, но мои таблицы довольно большие (30 Mio записей)

1 ответ

  1. В случае, если кто-то еще заинтересован, коллега предложил этот подход (и он работает).

     update zzzz_tab_3
     set
     x_names = (select x_names from zzzz_tab_1 where zzzz_tab_3.nr =   zzzz_tab_1.nr);
    
    
    
    update zzzz_tab_3
    set
    x_age = (select x_age from zzzz_tab_2  where zzzz_tab_3.nr = 
    zzzz_tab_2.nr);
    
    -- verify 
    select * from zzzz_tab_3;