[英]SQL - Updating values in subset of table using values from rows in different subset of same table
實際上,我想使用來自同一表的備用子集中的值來更新 SQL 表子集中的值。 以下面的數據框表示為例:
Company Employee Type Value
0 X A Category A 10
1 X A Category B 5
2 X A Category C 4
3 X A Category D 0
4 X A Category E 0
5 X A Category F 0
6 X A Category G 9
7 X B Category A 15
8 X B Category B 8
9 X B Category C 6
10 X B Category D 0
11 X B Category E 0
12 X B Category F 0
13 X B Category G 7
對於員工 A 和員工 B,我想更新類型在集合中的值(類別 D、類別 E、類別 F)與值中的相應值,其中類型在集合中(類別 A、類別 B、類別C)。 因此,我想要的結果如下:
Company Employee Type Value
0 X A Category A 10
1 X A Category B 5
2 X A Category C 4
3 X A Category D 10
4 X A Category E 5
5 X A Category F 4
6 X A Category G 9
7 X B Category A 15
8 X B Category B 8
9 X B Category C 6
10 X B Category D 15
11 X B Category E 8
12 X B Category F 6
13 X B Category G 7
在 MySQL 中執行此操作的最有效方法是什么? 我的嘗試如下:
UPDATE new_table
SET
Value = (SELECT
Value
FROM
(SELECT
*
FROM
new_table) t
WHERE
Type IN ('Category A', 'Category B', 'Category C'))
WHERE
Type IN ('Category D', 'Category E', 'Category F');
*我的真實列名與上述不同,因為我認為這些是保留名稱
更新
根據 OP 注釋,需要有一個Type
轉換表來指示給定類別的新值應來自何處:
UPDATE new_table t1
JOIN (SELECT 'C1' AS Cat1, 'C4' AS Cat2
UNION ALL
SELECT 'C2' AS Cat1, 'C5' AS Cat2
UNION ALL
SELECT 'C3' AS Cat1, 'C6' AS Cat2
) cats ON cats.Cat2 = t1.Type
JOIN new_table t2 ON t2.Employee = t1.Employee AND t2.Type = cats.Cat1
SET t1.Value= t2.Value
原答案
由於您在Type
值之間有直接關系,因此您可以在更新查詢中利用這一點,方法是將new_table
JOIN
到自身,其中Type
的差異為 3 並從JOIN
ed 表更新Value
:
UPDATE new_table t1
JOIN new_table t2 ON t2.Employee = t1.Employee AND t2.Type = t1.Type - 3
SET t1.Value= t2.Value
WHERE t1.Type in (4, 5, 6);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.