带有两个表连接的mysql查询

标签 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

使用的表格如下

国家/地区代码表

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

最佳答案

您似乎正在寻找与特定国家/地区代码关联的所有目的地。由于您实际上没有显示 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%'

关于带有两个表连接的mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19137523/

相关文章:

MySQL 选择日期介于

mysql - sql去年数据而已

mysql - 冲突的事务会导致奇怪的行为

php - MySql 查询错误

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - 是否可以在 mysql 中创建事务合并表?

mysql - 如何在 mysql 中声明二级或非唯一索引?

Php foreach 在时隙间隔中循环,如果间隔空闲则仅返回四分之一时间

php - 从 MySQL 和 PHP 的不同列中选择不同的值

mysql - 如何使用嵌套的 SELECT 子查询优化 UPDATE?