带有两个表连接的mysql查询

时间:2013-10-02 13:00:49

标签: mysql

民众

我有2个表国家代码,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

1 个答案:

答案 0 :(得分:0)

您要查找的是与特定国家/地区代码相关联的所有目的地。由于您实际上没有为cctonumbers.id = 15731显示任何返回结果,我认为您正在旋转以获得结果。让我们倒转树而不是走下去。

仅从那些具有父ID的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%'
相关问题