在比较另一列的数据之后更新一列的数据

时间:2014-07-17 20:19:10

标签: mysql sql

我有一个包含2列的表

NAME     SYNONYM
----------------
A        ALPHA            
B        ALPHA             
B        BITA                 
C        GAMA             
D        DELTA             
E        BITA    

我正在寻找一个检查列SYNONYM的SQL查询。如果它找到相同的SYNONYM,例如它在第二行中找到ALPHA与第1行相同,它将更改B并使其成为A.B的更改将在列{ {1}},不仅在一行中。

NAME

如果难以更改列NAME SYNONYM ---------------- A ALPHA A ALPHA A BITA C GAMA D DELTA A BITA ,我们可以像这样添加一个新列

NAME

1 个答案:

答案 0 :(得分:0)

注意:这种类型的查询在直接MySQL中是不可能的,如果它应该是动态查询... MySQL 不支持支持递归查询..但是如果您知道要更新的列,然后您可以以环形方式执行此查询。 因此,如果您想要更新某些列,则可以像这样执行此操作,它将完全按照您的要求进行操作。

修改

如果您使用用户定义的变量,您可以像这样遍历表:

SET @A := (SELECT DISTINCT name FROM example_table ORDER BY name LIMIT 0,1);

UPDATE example_table et,
(
    SELECT 
        DISTINCT synonym
    FROM example_table
    WHERE name IN 
    (
        SELECT 
            DISTINCT name
        FROM example_table
        WHERE synonym IN 
        (
            SELECT 
                DISTINCT synonym
            FROM example_table
            WHERE name = @A
        )
    )
) t 
SET et.name = @A WHERE et.synonym = t.synonym;

你需要做的就是在SET @A语句中增加0 .. LIMIT 0,1 ... LIMIT 1,1 ....每次执行时都会给你一个新的不同名称更新。希望有所帮助