2013-10-02 2 views
0

Людиmysql запрос с двумя табличными объединениями

У меня есть 2 таблицы countrycodes, cctonumbers, как описано ниже.

У меня есть запрос, который я попробовал, но не получил желаемый результат.

Мой выход

country   destination      country_code destination_code 

Afghanistan Afghanistan Mobile Etisalat    93  78 
Afghanistan Afghanistan Mobile Etisalat    93  72 
Afghanistan Afghanistan Mobile Roshan    93  79 
Afghanistan Afghanistan        93  93 

Желаемая выход

country   destination      country_code destination_code 

Afghanistan Afghanistan Mobile Etisalat    93   78 

Afghanistan Afghanistan Mobile Etisalat    93   72  

Afghanistan Afghanistan Mobile Roshan    93   79 

В таблицах использованы, как показано ниже таблице

countrycodes

id  parentid countryname 
1031  0   afghanistan 
1035  1031  Afghanistan Mobile Etisalat 
1036  1031  Afghanistan Mobile Roshan 

cctonumbers стол

id  countrycode_id  parentid   number 
15731 1031    0    93 
15197 1035    15731   78 
15198 1035    15731   72 
15199 1036    15731   79 

запрос, который я использую это, как показано ниже, но не получают желаемого результата.

select * 
    from 
     cctonumbers 
     LEFT JOIN countrycodes as CC 
      ON cctonumbers.countrycode_id = CC.id 
    WHERE 
     ( CC.parentid=0 
     AND number like '93%' 
     and cctonumbers.id in 
       (select cctonumbers.parentid 
        from cctonumbers 
         LEFT JOIN countrycodes as CC 
          ON cctonumbers.countrycode_id = CC.id 
         WHERE number like '7%' 
          AND CC.parentid!=0) 
       ) 
      or ( CC.parentid != 0 
       AND number like '7%' 
       AND CC.parentid in 
         (select CC.id 
          from cctonumbers 
           LEFT JOIN countrycodes as CC 
            ON cctonumbers.countrycode_id=CC.id 
          WHERE CC.parentid=0 
           AND number like '93%') 
      ) 
    ORDER BY 
     cctonumbers.number Asc 
+0

Не могли бы вы дать понять, что вы пытаетесь получить в результате? –

+0

Я думаю, что вы пытаетесь упорядочить их по иерархии? – Kuzgun

ответ

0

Что вы ищете, это все пункты назначения, связанные с конкретным кодом страны. Поскольку вы фактически не показываете результатов возврата для вашего cctonumbers.id = 15731, я думаю, вы вращались, чтобы получить свои результаты. Давайте обратим это дерево вместо того, чтобы спуститься вниз.

Начните с тех записей CCToNumbers, у которых есть родительский идентификатор, поскольку он отображается только на уровне 1 уровня. После того, как у вас есть записи на уровне ребенка, присоединитесь к CCToNumbers на своем родителе ... затем перейдите в таблицы кодов стран для обоих.

SELECT 
     CtoN.ID, 
     PCountry.CountryName, 
     DCountry.CountryName as Destination, 
     CtoNParent.Number as Country_Code, 
     CtoN.Number as Destination_Code 
    from 
     cctonumbers CtoN 
     JOIN cctonumbers as CtoNParent 
      ON CtoN.parentid = CtoNParent.ID 
      AND CtoNParent.number like '93%' 
      JOIN countrycodes as PCountry 
       ON CtoNParent.CountryCode_Id = PCountry.ID 
     JOIN countrycodes as DCountry 
      ON CtoN.CountryCode_Id = DCountry.ID 
    where 
     CtoN.number like '7%' 
Смежные вопросы