Sep 06, 2013 12:11
Есть две таблицы. it_tel_traf_sid про все звонки и it_tel_tarif про стоимость звонка на каждое направление.
Направлением может быть, например, Питер 8812, соответственно, все что начинается на 8812 считается по этому тарифу.
Но в Питере могут быть и любимые номера, тогда любимый номер, это тоже направление. А можно в Питере выделить серию номеров 8812777
и тоже сделать отдельным направлением по отдельной цене.
Да, еще вы можете видеть sevice_id тут. Это связано с тем, что некоторые клиенты могут иметь разные стоимости звонков на разные направления.
Вопрос, можно ли как-то менее кривым способом объединить эти две таблицы?
SELECT
FROM it_tel_traf_sid LEFT JOIN it_tel_tarif ON (
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND it_tel_tef_sid.dst=it_tel_tarif.direction) OR it_tel_tef_sid.dst=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-1)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-1)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-2)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-2)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-3)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-3)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-4)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-4)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-5)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-5)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-6)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-6)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-7)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-7)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-8)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-8)=it_tel_tarif.direction) OR
( (it_tel_tef_sid.service_id=it_tel_tarif.service_id AND SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-9)=it_tel_tarif.direction) OR SUBSTRING(it_tel_tef_sid.dst, 1, LENGTH(it_tel_tef_sid.dst)-9)=it_tel_tarif.direction) )