GOOGLE ADS

среда, 4 мая 2022 г.

Обновите таблицу, установите идентификатор на основе отношения. Столбец не найден

У меня есть следующее заявление об обновлении, но оно говорит[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<>скрипка здесь

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...