1

私は2つのテーブルを持っています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 に答える