gpt4 book ai didi

php - 条件更新同一列中的单元格

转载 作者:可可西里 更新时间:2023-11-01 08:20:54 24 4
gpt4 key购买 nike

我需要根据另一列中的 ID 更新特定列中的单元格。列名是 Prod_IDLang_IDDescr:

Prod_ID | Lang_ID | Descr
--------+---------+------
A101 | 1 | TextA
A101 | 2 | TextB
A101 | 3 | TextC

对于一组具有相同 Prod_ID 的行,我需要将所有后续描述(Descr 列)替换为第一行的描述。描述正确的行总是 Lang_ID = 1。此外,表格可能未按 Lang_ID 排序。

示例:TextA (Lang_ID = 1) 应该替换 TextBTextC 因为行的 Prod_IDs匹配。

最佳答案

您在其他地方的评论中提到“master”lang_id 始终为 1。这大大简化了事情,您可以通过简单的自连接(无子查询:-)来做到这一点

此查询选择所有 lang_1 行,然后将它们与同一 prod_id 的所有非 lang_1 行连接起来并更新它们。

如果Lang_ID=1 永远是“第一个”

UPDATE products 
LEFT JOIN products as duplicates
ON products.Prod_ID=duplicates.Prod_ID
AND duplicates.Lang_ID != 1
SET duplicates.Descr = products.Descr
WHERE products.Lang_ID = 1

编辑:如果 Lang_ID=1 可能不是“第一个”

您可以通过中间连接将表连接到自身,中间连接会找到该行的最低 Lang_ID。我将中间连接称为“lang_finder”。

UPDATE products 
LEFT JOIN (SELECT Prod_ID, MIN(Lang_ID) as Lang_ID FROM products GROUP BY Prod_ID) as lang_finder
ON products.prod_id=lang_finder.prod_id
LEFT JOIN products as cannonical_lang
ON products.Prod_ID = cannonical_lang.Prod_ID
AND lang_finder.Lang_ID = cannonical_lang.Lang_ID
SET products.Descr = cannonical_lang.Descr

请注意,虽然它确实使用了子查询,但并没有嵌套它们。子查询本质上只是向产品表(虚拟地)添加一个具有最低 Lang_ID 值的列,然后允许自连接匹配该列。因此,如果有 Lang_ID 为 3、4 和 5 的产品,这会将所有产品的 Descr 设置为为 Lang_ID 3 设置的任何值。

关于php - 条件更新同一列中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11416780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com