У меня есть следующее заявление об обновлении, но оно говорит[42S22][1054] Unknown column 'b.user_id' in 'on clause'
UPDATE brands b set b.workspace_id = (
SELECT w.id from workspaces w
INNER JOIN users u on b.user_id = u.id
inner join team_members tm on u.id = tm.user_id
inner join teams t on tm.team_id = t.id AND w.id = t.workspace_id
);
В основном есть brands
и workspaces
. Новый столбец workspace_id
был добавлен как внешний ключ, и идентификатор рабочей области можно найти через отношениеbrand -> has user_id -> user has team -> team has workspace_id
На стороне программирования я мог бы сначала найти все рабочие области для обработки, затем получить все идентификаторы пользователей для этой рабочей области, а затем запуститьupdate brands b set workspace_id =:wsId where user_id in (:userIds)
-- auto-generated definition
create table brands
(
id bigint auto_increment
primary key,
user_id int unsigned not null,
name varchar(100) null,
workspace_id int null
)
Решение проблемы
Вы не можете использовать столбец из брендов в условии соединения, но вы можете использовать его в условии где в подзапросе
create table brands (
workspace_id int,
user_id int
);
create table users (
id int);
create table team_members(
user_id int,
team_id int
);
create table teams (
id int,
workspace_id int
);
create table workspaces(
user_id int,
id int
);
UPDATE brands set workspace_id = (
SELECT w.id from workspaces w
INNER JOIN users u on w.user_id = u.id
inner join team_members tm on u.id = tm.user_id
inner join teams t on tm.team_id = t.id AND w.id = t.workspace_id
WHERE brands.user_id = u.id
);
db<>скрипка здесь
Комментариев нет:
Отправить комментарий