MySql更新与加入他自己

MySql更新与加入他自己,mysql,join,Mysql,Join,您好,我有一个查询,它为我选择了主键id=1或外键id=1的所有行。这是他自己 选择: SELECT f2.wz AS wz FROM d7x6r_magazyn_faktura_zakupowa f LEFT JOIN (SELECT id,id_glowna, wz FROM d7x6r_magazyn_faktura_zakupowa )AS f2 ON(((f2.id = f.id_gl

您好,我有一个查询,它为我选择了主键id=1或外键id=1的所有行。这是他自己

选择:

SELECT f2.wz AS wz FROM d7x6r_magazyn_faktura_zakupowa f

                        LEFT JOIN (SELECT id,id_glowna, wz FROM d7x6r_magazyn_faktura_zakupowa   )AS f2
                        ON(((f2.id = f.id_glowna OR f2.id = f.id OR f2.id_glowna = f.id OR f2.id_glowna = f.id_glowna)
                        AND f2.id_glowna <> 0)
                        OR ( f2.id = f.id  OR f2.id = f.id_glowna))
                        WHERE f.id = 1 OR f2.id_glowna  = 1;
现在我需要在所有行中将单元格wz更新为0。我尝试使用:

UPDATE  d7x6r_magazyn_faktura_zakupowa f

  LEFT JOIN (SELECT id,id_glowna, wz FROM d7x6r_magazyn_faktura_zakupowa   )AS f2
                ON(((f2.id = f.id_glowna OR f2.id = f.id OR f2.id_glowna = f.id OR f2.id_glowna = f.id_glowna)
                AND f2.id_glowna <> 0)
                OR ( f2.id = f.id  OR f2.id = f.id_glowna))

SET f2.wz = 0
WHERE f.id = 1 OR f2.id_glowna  = 1;

但它不起作用,因为f2.wz无法更新。

您必须创建TMP表,而且左联接不应该在那里

您似乎不需要子选择,可以使用联接:-

UPDATE  d7x6r_magazyn_faktura_zakupowa f
LEFT JOIN d7x6r_magazyn_faktura_zakupowa f2
ON(((f2.id = f.id_glowna OR f2.id = f.id OR f2.id_glowna = f.id OR f2.id_glowna = f.id_glowna)
AND f2.id_glowna <> 0)
OR ( f2.id = f.id  OR f2.id = f.id_glowna))
SET f2.wz = 0
WHERE f.id = 1 OR f2.id_glowna  = 1;

但是,您有一个左联接,但正在更新F2,而F2是可能不存在的行,因此内部联接可能更好

您可以在更新/插入/删除时进行联接,但不能更新这些联接表中的记录

不过,您可以使用触发器来执行此操作

DELIMITER $$

CREATE TRIGGER au_table1_each AFTER UPDATE ON table1 FOR EACH ROW
BEGIN
  UPDATE table2 SET fieldY = new.fieldX WHERE ...;
END $$

DELIMITER ;
触发器将在每次更新时触发,并使用表1中的一些新数据更新表2。 操作前后都有触发器,可以是UPDATE、INSERT或DELETE

见: 以及:


感谢:

您可以在更新/插入/删除时执行联接,但不能更新这些联接表中的记录。为什么不呢?