SQL命令将选定内容从选定行复制到其他行?

时间:2011-02-21 09:18:14

标签: php sql mysql phpmyadmin

任何想法如何复制:name,content from language_id = 1的行到language_id = 2的行? SQL命令应该如何?

enter image description here

我想要实现:enter image description here

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

假设您要将产品从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

当然这会对表格中的每一行都这样做,所以如果你想限制它,那么一定要用productids来限制它

答案 2 :(得分:0)

您的意思是将所有 language_id=1行复制到language_id=2行吗?

我对MySQL语法的了解很差,所以我不敢给你所有的codez,但至少你会发现以下方法很有用:

  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
    )
    
  5. 如果您不想更改现有的language_id=2数据,则应省略步骤#3,您可能还希望以选择language_id=1的方式修改步骤#2仅适用于缺少language_id=2的产品的数据。