Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql在不同条件下从另一个表连接列_Mysql_Join_Case - Fatal编程技术网

mysql在不同条件下从另一个表连接列

mysql在不同条件下从另一个表连接列,mysql,join,case,Mysql,Join,Case,我有一张价格表。我试图从另一个名为“rate\u cycles”的表中加入一列new\u rate,它应该基于某些条件。我很难创建这样一个查询。 Pricelist表包含前缀,下面是两个表中的示例。如果价格表中的一对国家+地区匹配,我将加入cycles的“新价格” 如果(在周期表中)前缀为null并通知0,则我需要从该行加入“新的_比率”。如果它被通知(notified=1),我需要查找下一行(如果存在),其中notified为0。如果该行中的前缀为空,则我从该行加入新的利率,但如果前缀不为空,

我有一张价格表。我试图从另一个名为“rate\u cycles”的表中加入一列new\u rate,它应该基于某些条件。我很难创建这样一个查询。 Pricelist表包含前缀,下面是两个表中的示例。如果价格表中的一对国家+地区匹配,我将加入cycles的“新价格”

如果(在周期表中)前缀为null并通知0,则我需要从该行加入“新的_比率”。如果它被通知(notified=1),我需要查找下一行(如果存在),其中notified为0。如果该行中的前缀为空,则我从该行加入新的利率,但如果前缀不为空,则对于新利率值,我需要前缀为空且通知为1的最后一行(如果存在,则为空)

我怎样才能做到这一点?谢谢

价格表

+----+--------------+---------+--------------+---------+-----------+----------+-----------+----------+--------+---------------------+----------------+ | id | pricelist_id | country | region | prefix | is_mobile | is_fixed | is_custom | currency | rate | last_updated | has_rate_cycle | +----+--------------+---------+--------------+---------+-----------+----------+-----------+----------+--------+---------------------+----------------+ | 2 | 1 | Albania | Fixed ALBTEL | 3554249 | 0 | 0 | 0 | USD | 0.0000 | 2014-09-23 09:48:00 | 1 | | 3 | 1 | Albania | Fixed ALBTEL | 3554250 | 0 | 0 | 0 | USD | 0.0000 | 2014-09-23 09:48:00 | 1 | | 4 | 1 | Albania | Fixed ALBTEL | 3554251 | 0 | 0 | 0 | USD | 0.0000 | 2014-09-23 09:48:00 | 1 | | 5 | 1 | Albania | Fixed ALBTEL | 3554252 | 0 | 0 | 0 | USD | 0.0000 | 2014-09-23 09:48:00 | 1 | +----+--------------+---------+--------------+---------+-----------+----------+-----------+----------+--------+---------------------+----------------+ +----+--------------+---------+--------------+---------+-----------+----------+-----------+----------+--------+---------------------+----------------+ |id |价格表| id |国家|地区|前缀|是|移动|是|固定|是|海关|货币|汇率|最后一次更新|有|汇率|| +----+--------------+---------+--------------+---------+-----------+----------+-----------+----------+--------+---------------------+----------------+ |2 | 1 |阿尔巴尼亚|固定资产| 3554249 | 0 | 0 | 0 | 0 | 0.0000 | 2014-09-23 09:48:00 | 1| |3 | 1 |阿尔巴尼亚|固定资产| 3554250 | 0 | 0 | 0 | 0 | 0.0000 | 2014-09-23 09:48:00 | 1| |4 | 1 |阿尔巴尼亚|固定资产| 3554251 | 0 | 0 | 0 | 0 | 0.0000 | 2014-09-23 09:48:00 | 1| |5 | 1 |阿尔巴尼亚|固定资产| 3554252 | 0 | 0 | 0 | 0 | 0.0000 | 2014-09-23 09:48:00 | 1| +----+--------------+---------+--------------+---------+-----------+----------+-----------+----------+--------+---------------------+----------------+ 周期表

+----+------------+---------+--------------+----------+---------------------+---------------+---------+----------+---------+ | id | carrier_id | country | region | new_rate | activation_date | update_status | prefix | notified | grouped | +----+------------+---------+--------------+----------+---------------------+---------------+---------+----------+---------+ | 1 | 15 | Albania | Fixed ALBTEL | 1.0000 | 2014-09-30 03:48:00 | NEW | NULL | 0 | 0 | | 2 | 15 | Albania | Fixed ALBTEL | 2.0000 | 2014-10-01 03:48:00 | BLOCKED | 3554250 | 0 | 0 | | 3 | 15 | Albania | Fixed ALBTEL | 3.0000 | 2014-10-02 03:48:00 | DECREASE | NULL | 0 | 0 | | 4 | 15 | Albania | Fixed ALBTEL | 4.0000 | 2014-10-03 03:48:00 | NEW | 3554250 | 0 | 0 | +----+------------+---------+--------------+----------+---------------------+---------------+---------+----------+---------+ +----+------------+---------+--------------+----------+---------------------+---------------+---------+----------+---------+ |id |承运人id |国家|地区|新费率|激活|日期|更新|状态|前缀|通知|分组| +----+------------+---------+--------------+----------+---------------------+---------------+---------+----------+---------+ |1 | 15 |阿尔巴尼亚|固定资产| 1.0000 | 2014-09-30 03:48:00 |新|空| 0 | 0| |2 | 15 |阿尔巴尼亚|固定资产| 2.0000 | 2014-10-01 03:48:00 |阻塞| 3554250 | 0 | 0| |3 | 15 |阿尔巴尼亚|固定资产| 3.0000 | 2014-10-02 03:48:00 |减少|零| 0 | 0| |阿尔巴尼亚固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产固定资产| +----+------------+---------+--------------+----------+---------------------+---------------+---------+----------+---------+
这是一个艰难的问题,并设法做到了我需要的。如果能简化一点就好了。我正在分享我的解决方案

SELECT p.id,p.country, p.region, p.prefix, p.currency, p.rate, (SELECT CASE WHEN notified = 0 THEN (SELECT CASE WHEN prefix IS NULL THEN new_rate ELSE (SELECT CASE WHEN COUNT(new_rate)>0 THEN (SELECT new_rate FROM pricelist_rates_cycle WHERE country=p.country and region=p.region and notified=1 and prefix is null order by DATE(activation_date) DESC LIMIT 1) ELSE NULL END FROM pricelist_rates_cycle WHERE country=p.country and region=p.region and notified=1 and prefix is null ) END FROM pricelist_rates_cycle WHERE country=p.country and region=p.region and notified=0 LIMIT 1) ELSE ( SELECT CASE WHEN COUNT(new_rate)>0 THEN IF( prefix is null, new_rate, (SELECT new_rate FROM pricelist_rates_cycle WHERE country=p.country and region=p.region and notified=1 and prefix is null order by DATE(activation_date) DESC LIMIT 1) ) ELSE (SELECT new_rate FROM pricelist_rates_cycle WHERE country=p.country and region=p.region and notified=1 and prefix is null order by DATE(activation_date) DESC LIMIT 1) END FROM pricelist_rates_cycle WHERE country=p.country and region=p.region and notified=0 ) END FROM pricelist_rates_cycle WHERE country=p.country and region=p.region LIMIT 1) AS new_rate FROM pricelist_15 AS p ORDER BY country, region ASC 选择p.id、p.country、p.region、p.prefix、p.currency、p.rate、, (通知时选择案例=0) 然后(选择前缀为NULL时的大小写) 然后是新的利率 其他(计数(新利率)>0时选择案例 然后(从价格表中选择新的价格,其中国家=p.country and region=p.region and notified=1,前缀为空order by DATE(激活日期)DESC LIMIT 1) 否则无效 终止 从价格表\u费率\u周期,其中国家=p.country和地区=p.region,通知=1,前缀为空 ) 终止 从价格表\u费率\u周期,其中国家=p.国家和地区=p.地区,通知=0限额1) 否则( 当计数(新比率)>0时选择案例 然后如果(前缀为空,则为新的_比率, (从价格表中选择新的价格,其中国家=p.country和地区=p.region,通知=1,前缀为空order by DATE(激活日期)DESC LIMIT 1) ) ELSE(从价格表中选择新的价格,其中国家=p.country和地区=p.region,通知=1,前缀为空order by DATE(激活日期)DESC LIMIT 1) 终止 从价格表\u费率\u周期,其中国家=p.国家和地区=p.地区,通知=0 ) 终止 从价格表价格周期中,国家=p.国家和地区=p.地区限制1)作为新价格 按国家、地区ASC从价格表_15订购
如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。@草莓,谢谢,我会的。我将在sqlfiddle创建一个模式。不要忘记,这个过程有两个步骤!这是小提琴,你说的第二步是什么意思?