2015-01-28 4 views
1

У меня сложный (для меня!) Запрос, в основном захватывает данные из 2 таблиц затем группируя их togeher (Этот бит работает на 100%, так как запрос на выборку)MySQL Обновление строки из запроса

Но когда Теперь мне нужно обновить базу данных в другой таблице, это не сработает.

Я получил это:

UPDATE 
    exp_channel_data data, 
    (
     SELECT 
      posts.cat_id, 
      posts.entry_id, 
      cats.cat_name, 
      cats.cat_id, 
      GROUP_CONCAT('{"',cats.cat_name, '"}:{"',cats.cat_name,'"}') as category_tag 
     FROM 
      exp_category_posts posts, 
      exp_categories cats 
     WHERE 
      cats.cat_id = posts.cat_id 
     GROUP BY 
      posts.entry_id 
    ) category 
SET 
    data.field_id_178 = category.category_tag 
WHERE 
    data.entry_id = category.entry_id; 

Но я получаю эту ошибку:

Duplicate column name 'cat_id'

Я думаю его потому, что я пытаюсь сделать связь между двумя таблицами, НО это не связывание.

Как я уже сказал, запрос SELECT работает сам по себе, но при вводе в UPDATE - он просто выбрасывает эту ошибку.

:(

+0

Попробуйте установить псевдонимы для столбцов с тем же именем: SELECT post.cat_ id AS pcat_id и т. д. – Whirlwind

ответ

2

Вы очень близки к тому, что вам нужно:.

UPDATE exp_channel_data data JOIN 
     (SELECT posts.entry_id, 
       GROUP_CONCAT('{"',cats.cat_name, '"}:{"',cats.cat_name,'"}') as category_tag 
     FROM exp_category_posts posts JOIN 
      exp_categories cats 
      ON cats.cat_id = posts.cat_id 
     GROUP BY posts.entry_id 
     ) category 
     ON data.entry_id = category.entry_id 
    SET data.field_id_178 = category.category_tag; 

Важной частью удалял cats.cat_id из подзапроса Вы имели два столбца с таким именем, путая MySQL

.

Я также исправил запрос для использования правильного, явного синтаксиса JOIN.

+0

Удивительно, спасибо, что имеет немного больше смысла. Я попробовал JOIN, но я продолжал получать его не в том месте, смотря на это. Я использую LEFT JOIN? В любом случае, потрясающе - Спасибо! –

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