次は期待どおりに動作しています。国が元の表にない場合の国のデフォルトCPMとCPCが表示されます。 一時テーブルを使用しています。一時テーブルを使用せずに実行できるかどうかを知りたいと思います。SQLステートメントのリファクタ
mysql> create temporary table country_list (country_name varchar(100));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into country_list values ('IN'), ('SA');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
select dt.country_name as country, dt.operator,
if (dt.cpm is null, (SELECT cpm FROM ox_bidding_configuration where country = '' and operator = ''), dt.cpm) as updated_cpm,
if (dt.cpc is null, (SELECT cpc FROM ox_bidding_configuration where country = '' and operator = ''), dt.cpc) as updated_cpc,
if (dt.cpa is null, (SELECT cpa FROM ox_bidding_configuration where country = '' and operator = ''), dt.cpa) as updated_cpa
from (
select a.country_name, b.operator, cpm, cpc, cpa from country_list as a left join ox_bidding_configuration as b on a.country_name = b.country group by b.country, b.operator, cpm, cpc, cpa) as dt;
+---------+----------+-------------+-------------+-------------+
| country | operator | updated_cpm | updated_cpc | updated_cpa |
+---------+----------+-------------+-------------+-------------+
| SA | NULL | 1.0000 | 1.0000 | 1.0000 |
| IN | | 2.0000 | 2.0000 | 2.0000 |
| IN | abcd | 11.0000 | 23.0000 | 4.0000 |
+---------+----------+-------------+-------------+-------------+
国SAはプライマリテーブルにありません。だから私は自己の左の結合を使用することはできません。より良い方法があるかどうかを知りたいと思います。
PS:かなり多くの未テストに、あなたはここにタイプミスを修正する必要がある場合がありますので、そこ – deroby
は物事のカップルを修正しました。 SQLサーバの 'ISNULL()'には、MySQLに相当する 'IFNULL()'があります。または両方で動作するANSI 'COALESCE()' –
ああ、thx、もう一度学んだこと...私はそれを念頭に置くようにしようとします。 – deroby