Die ersten Fragen wurden als zu ähnlich zu einem anderen Beitrag angesehen (was nicht der Fall war) und wurden geschlossen ... also habe ich hier einen weiteren Versuch unternommen, diesmal hoffentlich besser formuliert.
Einige Hintergrundinformationen: Wir haben hier eine Beziehung. Wertpapiere (Coins) + Währungen (Basiscoins) bilden ein Paar. Ein Paar und ein Broker bilden einen Vermögenswert (ich behandle jeden Broker/jedes Paar als einen bestimmten Vermögenswert)
Ich habe auch eine Wechselkurstabelle, in der Wechselkurse in Echtzeit gespeichert sind.
In meiner Transaktionsverlaufstabelle (history_price) gibt es eine Spalte, die viele NULL-Werte (Euro-Volumen) enthält, die ich anhand des Volumens berechne. Ich möchte es füllen, und dazu muss ich (für jede NULL-Zeile) Folgendes tun:
So segmentiere ich die Abfrage:
SELECT `history_price`.`param_basecoin`.`Symbol` FROM `history_price`.`param_asset` INNER JOIN `param_pair` ON `history_price`.`param_asset`.`id_pair` = `history_price`.`param_pair`.`pair_id` INNER JOIN `history_price`.`param_basecoin` ON `history_price`.`param_pair`.`Coin2_id` = `history_price`.`param_basecoin`.`basecoin_id` WHERE `history_price`.`param_asset`.`Ticker` LIKE '???'
SELECT `Rate` FROM `history_price`.`param_forex` WHERE `Coin` LIKE '???' AND `Basecoin` LIKE 'EUR'
UPDATE `history_price` SET `history_price`.`eur_v` = (`history_price`.`Basecoin_v` * ???) WHERE `history_price`.`eur_v` IS NULL
UPDATE `history_price` SET `history_price`.`eur_v` = (`history_price`.`Basecoin_v` * (SELECT `Rate` FROM `history_price`.`param_forex` WHERE `Coin` LIKE '???' AND `Basecoin` LIKE 'EUR')) WHERE `history_price`.`eur_v` IS NULL
UPDATE `history_price` SET `history_price`.`eur_v` = (`history_price`.`Basecoin_v` * ( SELECT `Rate` FROM `history_price`.`param_forex` WHERE `Coin` LIKE ( SELECT `history_price`.`param_basecoin`.`Symbol` FROM `history_price`.`param_asset` INNER JOIN `param_pair` ON `history_price`.`param_asset`.`id_pair` = `history_price`.`param_pair`.`pair_id` INNER JOIN `history_price`.`param_basecoin` ON `history_price`.`param_pair`.`Coin2_id` = `history_price`.`param_basecoin`.`basecoin_id` WHERE `history_price`.`param_asset`.`Ticker` LIKE `history_price`.`Ticker` ) AND `Basecoin` LIKE 'EUR' ) ) WHERE `history_price`.`eur_v` IS NULL;
Es funktioniert, aber zu langsam... Gibt es eine Möglichkeit, es zu optimieren und schneller zu machen?
使用
JOIN
而不是相关子查询。