Команда SQL для копирования выбранного содержимого из выбранных строк в другие строки? - PullRequest
0 голосов
/ 21 февраля 2011

Есть идеи, как копировать: имя, содержимое из строк, где language_id = 1, в строки, где language_id = 2?Как должна выглядеть команда SQL?

enter image description here

Я хочу достичь: enter image description here

Ответы [ 3 ]

1 голос
/ 21 февраля 2011

при условии, что это продукт, который вы хотите обновить с lang1 до lang 2

update a set
a.name = b.name,
a.content = b.content
from tablea a 
join tablea b on a.productid = b.productid
where a.language_id = 2
and b.language_id = 1

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

1 голос
/ 21 февраля 2011

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html - это то, что вам нужно сделать

0 голосов
/ 21 февраля 2011

Вы имели в виду копировать все language_id=1 строки в language_id=2 строки?

Мои знания синтаксиса MySQL очень плохие, поэтому я не осмелюсь дать вам весь код, но, по крайней мере, вам может пригодиться следующий подход:

  1. Создайте временную таблицу со структурой, подобной этой:

    product_id int,
    name (varchar?)
    content (varchar?)
    

    То есть, включите product_id и все столбцы, которые нужно скопировать.

  2. Заполните временную таблицу данными language_id=1. Вероятно так:

    INSERT INTO temp_table
    SELECT product_id, name, content
    FROM orig_table
    WHERE language_id = 1
    
  3. Обновите те строки в исходной таблице, где language_id=2, с соответствующими данными во временной таблице. Это может выглядеть так:

    UPDATE orig_table
    SET
      name = temp_table.name,
      content = temp_table.content
    FROM temp_table
    WHERE orig_table.product_id = temp_table.product_id
      AND orig_table.language_id = 2
    
  4. Вставьте строки из временной таблицы в исходную таблицу, где у продуктов нет language_id=2. Примерно так:

    INSERT INTO orig_table (product_id, language_id, name, content)
    SELECT product_id, 2, name, content
    FROM temp_table
    WHERE NOT EXISTS (
      SELECT 1 FROM orig_table
      WHERE product_id = temp_table.product.id
        AND language_id = 2
    )
    

Если вы не хотели изменять уже существующие данные language_id=2, то шаг № 3 следует опустить, и вам может потребоваться изменить шаг № 2 таким образом, чтобы он выбирал language_id=1 данные только для продукты, в которых отсутствует language_id=2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...