mysql—比较表中的两个值并使用触发器更新另一列

lmvvr0a8  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(298)

我有一个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\u dosen和id\u dosen2与所有其他行的id\u dosen和id\u dosen2进行比较,并对第2行执行相同的操作,以此类推,给出一个示例,我需要知道第1行是否与其他行具有相同的值,如果触发了对tetangga1和tetangga2的更新,其中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\u dosen2与行2的id\u dosen具有相同的值。第1行的tetangga2列中将包含第3行的id,因为第1行的id\u dosen与第3行的id\u dosen具有相同的值
有人能帮我吗?

js81xvg6

js81xvg61#

在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
cigdeys3

cigdeys32#

我相信这一点以前已经得到了回答,但请尝试以下方法:

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

相关问题