1

我有两个表 1)国家代码:

在此处输入图像描述

2)cctonumbers:

在此处输入图像描述

问题

当我执行如下查询时:

SELECT * 
FROM   CCTONUMBERS 
       LEFT JOIN COUNTRYCODES AS CC 
              ON CCTONUMBERS.COUNTRYCODE_ID = CC.ID 
WHERE  ( CC.PARENTID = 0 
         AND NUMBER LIKE "93%" ) 
        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 
LIMIT  0, 20 

我得到的结果如下

在此处输入图像描述

我正在寻找的结果是,当我在拨号代码中搜索 7 时,我应该只得到以 7 开头的拨号代码(请参阅 cctonumbers 中的数字列),但我在拨号代码列中得到“93”根据屏幕截图,这是不正确的。

如果上面的 sql 查询有问题,请告诉我。有关表格的详细信息,请参阅上面的表格屏幕截图

4

2 回答 2

0

您已经使用 OR 与

(CC.parentid=0 AND number like "93%" ) 或者 (CC.parentid!=0 AND number like "7%" AND...

这表明是否有任何具有 93.. 值的数字比查询也会获取它们

cctonumbers 表的最后一行满足这个条件,其中 parentid 为 0,number 为 93。

于 2013-09-03T06:02:48.990 回答
0

您在 where 子句的第一部分(OR 之前的部分)明确要求编号为 93 的国家/地区。这就是为什么您使用拨号代码 93 获得阿富汗的原因。

于 2013-09-03T06:18:01.910 回答