0

私は2つのテーブルを持っています。1つは数値の範囲で、2つ目は数値です。ステータスが (2,0) の数字が少なくとも 1 つあるすべての範囲を選択する必要があります。私はいくつかの異なる結合を試しましたが、それらのいくつかは実行に永遠にかかりました.私が終了したものは高速ですが、本当に少数の範囲を選択します.

   SELECT SQL_CALC_FOUND_ROWS md_number_ranges.*
     FROM md_number_list
     JOIN md_number_ranges
       ON md_number_list.range_id = md_number_ranges.id
    WHERE md_number_list.phone_num_status NOT IN  (2, 0)
      AND md_number_ranges.reseller_id=1
 GROUP BY range_id
    LIMIT 10
   OFFSET 0

必要なのは、「すべての範囲を選択し、number.range_id = range.id で、phone_number_status が (2, 0) にない番号が少なくとも 1 つある番号を結合する」のようなものです。

どんな助けでも本当に感謝しています。

データ構造の例:

md_number_ranges:

id  |  range_start  |  range_end |  reseller_id 
 1  |     000001    |    000999  |       1
 2  |     100001    |    100999  |       2

md_number_list:

id  |   range_id    |  number    |  phone_num_status
 1  |       1       |  0000001   |       1 
 2  |       1       |  0000002   |       2
 3  |       2       |  1000012   |       0
 4  |       2       |  1000015   |       2

ステータス1の数字が1つあるため、範囲1を選択できるようにしたいのですが、範囲2は選択できません.2つの数字があるため、選択したくないステータスです。

4

2 に答える 2

0

これはあなたが探しているものですか?

SELECT DISTINCT r.*
FROM md_number_ranges r
    JOIN md_number_list l ON r.id = l.range_id
WHERE l.phone_num_status NOT IN (0,2)

SQL フィドルのデモ

于 2013-03-31T17:29:44.263 に答える