我有查询,它选择了所有主键(id)= 1或外键= 1的行。这是自己加入。
SELECT:
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无法更新,因此无效。
答案 0 :(得分:1)
您似乎不需要子选择,只能使用JOIN: -
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;
但是你有LEFT JOIN但是正在更新F2,这可能不是那里的行,所以INNER JOIN可能会更好
答案 1 :(得分:1)
您可以在更新/插入/删除时进行连接,但不能更新这些连接表中的记录。
您可以使用触发器执行此操作
DELIMITER $$
CREATE TRIGGER au_table1_each AFTER UPDATE ON table1 FOR EACH ROW
BEGIN
UPDATE table2 SET fieldY = new.fieldX WHERE ...;
END $$
DELIMITER ;
触发器将使用table1中的一些新数据触发每次更新和更新table2。 在操作之前和之后都有触发器,可以是UPDATE,INSERT或DELETE
请参阅:http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html 并且:http://www.databasedesign-resource.com/mysql-triggers.html
答案 2 :(得分:0)
您必须创建TMP
表,LEFT JOIN
也不应该