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