我有一张下表
Table A
Col1 Col2 Col3
Ant sugar,ice 2,3
Fly sugar,ice 2,3
jack water,dent 4,5
pack water 4,5
hero sugar,ice 2,3
我想查看表数据和 必须将表更新为
Col1 Col2 Col3
Ant sugar,ice 2,3
Fly Same as Ant 2,3
jack water,dent 4,5
pack water 4,5
hero Same as Ant 2,3
帮助解决问题, 我让样本表理解了 谢谢和问候。
答案 0 :(得分:0)
对于不同的RDBMS,语法可能会有所不同,但由于您没有指定一个,因此以下查询应该非常接近“标准”SQL并且应该适用于大多数引擎:
UPDATE "Table A" AS A1
SET Col2 =
(
SELECT 'Same as ' + MIN(A2.Col1)
FROM "Table A" AS A2
WHERE A2.Col2 = A1.Col2
AND A2.Col1 < A1.Col1
)
WHERE EXISTS
(
SELECT 1
FROM "Table A" AS A2
WHERE A2.Col2 = A1.Col2
AND A2.Col1 < A1.Col1
)
注意:恕我直言这对于表模式来说绝对是可怕的设计,我认为可以安全地说我永远不会使用以这种方式设计的表。您可能值得阅读一本关于数据库设计的好书,尤其是关于规范化的部分。
答案 1 :(得分:0)
SQL Server
UPDATE a
SET a.col2 = CASE WHEN a.col1 = b.min_col1
THEN a.col2
ELSE 'Same as ' + b.min_col1
END
FROM TableA a
INNER JOIN
(
SELECT col2, MIN(col1) min_col1
FROM TableA
GROUP BY col2
) b ON a.col2 = b.col2
输出
╔══════╦═════════════╦══════╗
║ COL1 ║ COL2 ║ COL3 ║
╠══════╬═════════════╬══════╣
║ Ant ║ sugar,ice ║ 2,3 ║
║ Fly ║ Same as Ant ║ 2,3 ║
║ jack ║ water,dent ║ 4,5 ║
║ pack ║ water ║ 4,5 ║
║ hero ║ Same as Ant ║ 2,3 ║
╚══════╩═════════════╩══════╝