我有两张桌子,一张是数字范围,第二张是数字。我需要选择所有范围,其中至少有一个状态为(2,0)的数字。我已经尝试了许多不同的连接,其中一些需要永远执行,我结束的一个很快,但它选择了非常少的范围。
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)中。
任何帮助都会非常感激。
示例数据结构:
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的数字,但不是范围2,因为它有两个数字,但状态我不想选择。
答案 0 :(得分:0)
要说出你想要的东西有点难,但也许会这样:
SELECT *
from md_number_ranges m
join (
SELECT md_number_ranges.id
, count(*) as FOUND_ROWS
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
) x
on x.id=m.id
LIMIT 10
OFFSET 0
答案 1 :(得分: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)