SQL查询以更新相同的表
我有一张桌子在下面SQL查询以更新相同的表,sql,sql-server-2008,Sql,Sql Server 2008,我有一张桌子在下面 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,de
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
帮助解决问题,,
我做了样表来理解
谢谢大家。对于不同的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
)
将“表A”更新为A1
设置Col2=
(
选择“与”相同+最小值(A2.Col1)
从“表A”中取A2
其中A2.Col2=A1.Col2
A2.Col1
注意:IMHO这绝对是一个可怕的表模式设计,我认为可以肯定地说,我永远不会使用以这种方式设计的表。可能值得您阅读一本关于数据库设计的好书,特别是关于规范化的部分。For
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 ║
╚══════╩═════════════╩══════╝
你在用什么
RDBMS
代表关系数据库管理系统RDBMS是SQL的基础,对于所有现代数据库系统,如MS SQL Server、IBM DB2、Oracle、MySQL等,我使用的是SQL Server 2008