SQL Query更新同一个表

时间:2013-04-25 07:23:40

标签: 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,dent  4,5
pack  water       4,5
hero  Same as Ant 2,3

帮助解决问题, 我让样本表理解了 谢谢和问候。

2 个答案:

答案 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  ║
╚══════╩═════════════╩══════╝