我有一个包含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
答案 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 ....每次执行时都会给你一个新的不同名称更新。希望有所帮助