2014-10-22 3 views
0

У меня есть таблица 1, которая содержит много объектов и другую (таблица 2), которая имеет 2 столбца: первичный ключ таблицы 1 и второй столбец. Субъект в таблице 1 имеет несколько других лиц (из таблицы 1, тоже), назначенные второй колонке в таблице 2

пример:
Устанавливается с предложением select

id | type | ownerId 
1 | bigObject | 1 
2 | littleObj | 3 
3 | littleObj | 3 

id | key 
1 | 2 
1 | 3 

и я хочу, чтобы обновить OwnerId всех littleObjects к OwnerId больших объектов.
Что я пробовал:

UPDATE entity 
SET ownerid = (SELECT ownerid 
       FROM entity 
       WHERE id = 1) 
WHERE id IN (SELECT key 
       FROM table_b 
       WHERE id = 1) 
; 

Но он говорит, Вы не можете указать целевую таблицу, объект "для обновления в ЕКОМ

+0

, как я могу видеть вас: обновление OwnerId в сущности со значением, который в настоящее время находится в сущности, где ID = 1 (то есть OwnerId = 1), и условие о том, что идентификатор должен быть в ключи (2 или 3) ... для меня это не имеет смысла ... просьба уточнить, что вы хотите сделать –

+0

Ares Draguna, что я и хочу делать. – user2414460

ответ

0

Вы должны использовать MySQL, потому что генерирует ошибку. Используйте эту форму вместо:

UPDATE entity e CROSS JOIN 
     (SELECT ownerid 
     FROM entity 
     WHERE id = 1 
     ) e1 
    SET e.ownerid = e1.ownerid 
WHERE id IN (SELECT key 
      FROM table_b 
      WHERE id = 1) 
+0

Это работало точно так, как я хотел. Спасибо! Еще не знал о перекрестном соединении – user2414460

Смежные вопросы