我有一个类似下面的mysql表
id id_dosen id_dosen2 tetangga1 tetangga2
1 1 2 null null
2 2 3 null null
3 1 3 null null
4 4 5 null null
5 4 6 null null
6 6 null null null
我需要将第1行的id_dosen和id_dosen2与所有其他行上的一行进行比较,并从第2行执行相同操作,依此类推,给定示例我需要知道第1行是否与其他行具有相同的值行,如果有触发更新到tetangga1和tetangga 2,其中tetangga1和tetangga2中的值将是与当前行具有相同值的行的id,因此该表将是像这样
id id_dosen id_dosen2 tetangga1 tetangga2
1 1 2 2 3
2 2 3 1 3
3 1 3 1 2
4 4 5 5 null
5 4 6 4 6
6 6 null 5 null
解释:第1行在其tetangga1列中将包含第2行的id,因为第1行的id_dosen2与第2行的id_dosen具有相同的值。 第1行将在其tetangga2列中包含第3行的id,因为第1行的id_dosen与第3行的id_dosen具有相同的值
谁能帮助我吗?答案 0 :(得分:0)
我确信之前已经回答过,但请尝试一下:
MERGE
INTO mytable t1
USING mytable t2
ON (
t1.id_dosen2 = t2.id
)
WHEN MATCHED THEN
UPDATE
SET tetangga1 = t2.id_dosen, tetangga2 = t2.id_dosen2
答案 1 :(得分:0)
这绝对不是MySQL中容易解决的问题,但它是可行的。此查询(SQLFiddle)适用于您的示例数据:
UPDATE table1, (SELECT id, tetangga1, IF(tetangga2 = tetangga1, NULL, tetangga2) AS tetangga2
FROM (SELECT t1.id AS id, MIN(t2.id) AS tetangga1, MAX(t2.id) AS tetangga2
FROM table1 t1
JOIN table1 t2
ON (t2.id_dosen = t1.id_dosen OR t2.id_dosen = t1.id_dosen2 OR
t2.id_dosen2 = t1.id_dosen OR t2.id_dosen2 = t1.id_dosen2) AND
t2.id != t1.id
GROUP BY t1.id) t3) t4
SET table1.tetangga1 = t4.tetangga1, table1.tetangga2 = t4.tetangga2
WHERE table1.id = t4.id