Update nach Upgrade von 5.0 auf 5.1
am 16.01.2008 00:02:42 von Robert EcklHabe mit folgendem Update, das in 5.0 noch einwandfrei funktionierte seit
Umstellung auf 5.1 ein Problem:
update fondspreise p1
join VortagPreis p2 using (wkn, datum)
set p1.Vortag_Diff = round((1-p1.rücknahme/p2.Rücknahme2) * -100,3)
where p1.Vortag_Diff is null and p2.Vortag_diff is null
Hier wird angemeckert :
The definition of table 'p2' prevents operation UPDATE on table p1
p2 ist eine View auf die Tabelle fondspreise (p1).
Vielleicht könnt Ihre mir auf die Sprünge helfen. Nachstehend zumindest die
ausschnittsweise die Tabellen- bzw. Viewdefinitionen:
CREATE TABLE `mydb`.`fondspreise` (
`WKN` varchar(6) NOT NULL DEFAULT '',
`Datum` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`Ausgabe` double DEFAULT NULL,
...
`Rücknahme` double DEFAULT NULL,
`Vortag_Diff` double DEFAULT NULL,
...
`TIS_CH` double DEFAULT NULL,
PRIMARY KEY (`Datum`,`WKN`),
KEY `Index_Datum` (`Datum`),
KEY `Index_WKN` (`WKN`),
KEY `Vortag` (`Vortag_Diff`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='InnoDB free: 12288 kB';
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER
VIEW `mydb`.`vortagpreis` AS
select `p1`.`WKN` AS `wkn`,
`p1`.`Datum` AS `datum`,
`p1`.`Ausgabe` AS `ausgabe`,
`p1`.`Rücknahme` AS `rücknahme`,
`p1`.`Vortag_Diff` AS `Vortag_Diff`,
round(((1 - (`p1`.`Rücknahme` / `p2`.`Rücknahme`)) * -(100)),3) AS
`Berechnung`,
(round(((1 - (`p1`.`Rücknahme` / `p2`.`Rücknahme`)) * -(100)),3) -
`p1`.`Vortag_Diff`) AS `Test`,
`p2`.`Datum` AS `Datum2`,`p2`.
`Ausgabe` AS `Ausgabe2`,
`p2`.`Rücknahme` AS `Rücknahme2`,
`p2`.`Vortag_Diff` AS `Vortag_Diff2`
from (`fondspreise` `p1`
join `fondspreise` `p2`
on(((`p1`.`WKN` = `p2`.`WKN`) and
(`p2`.`Datum` =
( select max(`p3`.`Datum`) AS `max(p3.datum)`
from `fondspreise` `p3`
where ((`p3`.`Datum` < `p1`.`Datum`) and
(`p3`.`WKN` = `p1`.`WKN`)))))))
where isnull(`p1`.`Vortag_Diff`);
TIA,
Robert