2014-09-27 2 views
0

У меня есть эта таблицаОбновить таблицу с отчетливыми выбранными значениями из тех же таблицы

enter image description here

То, что я хочу сделать, что Выберите attr_id ГДЕ Отчетливый name_en-GB появляется, а затем установить, что выбранные attr_id для этого name_en-GB

Я могу это сделать, написав индивидуальные запросы, но я хочу знать, есть ли способ сделать это в одном запросе?

Я попробовал этот

UPDATE sc_product_phrase 
SET attr_id = (
    SELECT DISTINCT 
     sc_product_phrase.caption, 
     sc_product_phrase.design_phrase_id 
    FROM 
     `sc_product_phrase` as x 
    GROUP BY 
     sc_product_phrase.caption 
    ) 

но показать ошибку

[Err] 1093 - Вы не можете указать целевую таблицу 'sc_product_phrase' для обновления в предложении FROM

EDITED

Я хочу, чтобы мой стол, чтобы выглядеть следующим образом http://sqlfiddle.com/#!2/d65eb/1

ПРИМЕЧАНИЕ: - Я не хочу использовать этот запрос в этой скрипке

+0

Пожалуйста, отредактируйте ваш вопрос и покажите, что вы хотите, чтобы данные выглядели как * после * обновления. Кроме того, ваш запрос включает столбцы, такие как 'caption', которые не находятся в образцах данных. Пожалуйста, исправьте вопрос. –

+0

Вы пытаетесь установить значение одного поля в значение двух полей. Это никогда не сработает. –

+0

@GordonLinoff спасибо. изм – 2014-09-27 11:34:14

ответ

1

Вашего SQL Скрипка делает вопрос гораздо яснее. Вам нужен минимальный идентификатор атрибута для всех строк с тем же значением в последнем столбце. Вы можете сделать это с помощью update/join, как это:

UPDATE table1 JOIN 
     (SELECT `name_en-GB`, min(Attr_Id) as minai 
     from table1 
     GROUP BY `name_en-GB` 
     ) tt 
     on table1.`name_en-GB` = tt.`name_en-GB` 
    SET attr_id = tt.minai 
WHERE table1.`name_en-GB` IN ('Bride Name', 'Child Grade') AND 
     table1.attr_id <> tt.minai; 

Я не уверен, что если вам нужна in часть. Вы можете обновить их все, удалив это предложение.

+0

Вы Легенда сэр ... спасибо – 2014-09-27 11:57:49

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