MySql更新与加入他自己
您好,我有一个查询,它为我选择了主键id=1或外键id=1的所有行。这是他自己 选择: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
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
见:
以及:
感谢:您可以在更新/插入/删除时执行联接,但不能更新这些联接表中的记录。为什么不呢?