2013-04-25 80 views
-1

我有如下表SQL查詢更新相同的表

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

什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)你是使用? 'RDBMS'代表*關係數據庫管理系統*。 'RDBMS是SQL'的基礎,並且適用於所有現代數據庫系統,如MS SQL Server,IBM DB2,Oracle,MySQL等...... – 2013-04-25 07:25:06

+0

我正在使用SQL Server 2008 – Parag 2013-04-25 07:32:33

回答

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 
) 

注:恕我直言,這絕對是horrid爲表格模式設計,我認爲可以肯定地說我永遠不會使用以這種方式設計的表格。閱讀一本關於數據庫設計的好書可能是值得的,特別是關於正常化的部分。

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