Batch pertama soalan dianggap terlalu serupa dengan siaran lain (bukan) dan telah ditutup... jadi saya telah membuat satu lagi percubaan di sini, semoga perkataan yang lebih baik kali ini.
Sesetengah latar belakang: Kami mempunyai hubungan di sini. Sekuriti (syiling) + mata wang (syiling asas) membentuk pasangan. Sepasang dan broker membentuk aset (saya menganggap setiap broker/pasangan sebagai aset tertentu)
Saya juga mempunyai jadual pertukaran asing yang menyimpan kadar pertukaran mata wang masa nyata.
Dalam jadual sejarah transaksi saya (history_price), terdapat lajur yang mengandungi banyak NULL (volume Euro), yang saya kira berdasarkan volum. Apa yang saya mahu lakukan ialah mengisinya, dan untuk melakukan ini saya perlu (untuk setiap baris NULL):
Begini cara saya membahagikan pertanyaan:
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;
Ia berfungsi, tetapi terlalu perlahan... Adakah terdapat cara untuk mengoptimumkannya dan menjadikannya lebih pantas?
Gunakan
JOIN
bukannya subkueri berkorelasi.