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

发布于 2024-10-18 12:07:55 字数 219 浏览 2 评论 0原文

知道如何将名称、内容从 language_id = 1 的行复制到 language_id = 2 的行吗? SQL命令应该是什么样的?

在此处输入图像描述

我想要实现:在此处输入图像描述

Any idea how to copy: name, content from rows where language_id = 1 to rows where language_id = 2?
How should SQL command look like?

enter image description here

I want to achive:enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缘字诀 2024-10-25 12:07:55

假设您想要将 ProductID 从 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

当然,这将为表中的每一行执行此操作,因此如果您想限制它,请确保通过 ProductID 来限制它

assuming it is the productid that you want to update from lang1 to 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

ofcourse this will do it for every row in the table so if you want to restrict it then make sure to restrict it by the productids

谈场末日恋爱 2024-10-25 12:07:55

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

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

  1. 创建一个结构如下的临时表:

    product_id int,
    名称(varchar?)
    内容(varchar?)
    

    也就是说,包含 product_id 以及需要复制的所有列。

  2. 使用 language_id=1 数据填充临时表。大概是这样的:

    插入临时表
    选择产品 ID、名称、内容
    来自原始表
    其中语言_id = 1
    
  3. 使用临时表中的相应数据更新原始表中 language_id=2 的行。它可能看起来像这样:

    更新 orig_table
    放
      名称=临时表.名称,
      内容 = temp_table.content
    来自临时表
    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, 名称, 内容
    来自临时表
    不存在的地方(
      从 orig_table 中选择 1
      其中product_id = temp_table.product.id
        且语言 ID = 2
    )
    

如果您不想更改已经存在的 language_id=2 数据,则应省略步骤 #3,并且您可能还想修改步骤 #2,以便它仅针对缺少 language_id=2 的产品选择了 language_id=1 数据。

Did you mean copying all language_id=1 rows to language_id=2 ones?

My knowledge of MySQL syntax is very poor, so I dare not give you all the codez, but at least you may find the following approach useful:

  1. Create a temp table with the structure like this:

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

    That is, include product_id and all the columns you need to copy.

  2. Populate the temp table with the language_id=1 data. Probably like this:

    INSERT INTO temp_table
    SELECT product_id, name, content
    FROM orig_table
    WHERE language_id = 1
    
  3. Update those rows in the original table where language_id=2 with the corresponding data in the temp table. It may look like this:

    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. Insert the rows from the temp table into the original table, where the products don't have language_id=2. Something like this:

    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
    )
    

If you didn't mean to change the already existing language_id=2 data, then step #3 should be omitted and you might further want to modify step #2 in such a way that it selected language_id=1 data only for the products lacking language_id=2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文