【问题标题】:Mysql join with counting results in another tableMysql join 与另一个表中的计数结果
【发布时间】:2013-03-31 16:59:38
【问题描述】:

我有两张表,一张是数字范围,第二张是数字。我需要选择所有范围,其中至少有一个状态为 (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 的号码,并且至少有一个电话号码状态不在 (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,因为它有两个数字,但状态我不想选择。

【问题讨论】:

  • 是否可以共享表列和一些数据?
  • 是的,我想,但不确定如何在 stackoverflow 编辑器中制作表格
  • 您可以截屏,并作为图片上传。
  • 我在原始帖子中添加了示例

标签: mysql select join count


【解决方案1】:

很难说出你想要什么,但也许这样可以:

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

【讨论】:

  • 非常感谢您的帮助,但这对我不起作用,我在 SQL_CALC_FOUND_ROWS 附近遇到语法错误
  • 我用不同的变量名替换了 SQL_CALC_FOUND_ROWS,它现在似乎可以工作,但它仍然不会选择所有结果
  • 如果你的意思是你只得到 10 行,那是因为你的 LIMIT 声明。否则我不明白,对不起。我会用不同的列名修改答案;这是一个保留字。
  • 不,不是限制造成的,是我的错。非常感谢您的帮助!
【解决方案2】:

这就是你要找的吗?

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 Fiddle Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多