mysql查询where IN语句

mysql查询where IN语句,mysql,sequence,database,between,Mysql,Sequence,Database,Between,我想做以下工作: SELECT count(id) FROM table WHERE value BETWEEN 3 AND 40; SELECT count(id) FROM table WHERE value IN(3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 40); 但它应该做到以下几点: SELECT count(id) FROM table WHERE value BETWEEN 3 AND 40; SELECT count(id) FROM table

我想做以下工作:

SELECT count(id) FROM table WHERE value BETWEEN 3 AND 40;
SELECT count(id) FROM table WHERE value IN(3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 40);
但它应该做到以下几点:

SELECT count(id) FROM table WHERE value BETWEEN 3 AND 40;
SELECT count(id) FROM table WHERE value IN(3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 40);
它甚至应该打印出3到40之间的值的零计数(id),而不是值=x。我想检查一个值是否在一个序列中(1,2,3,4,…,50)

有人知道如何用mysql实现这一点吗


谢谢。

假设我理解你的问题:

SELECT count(id) FROM table WHERE value >= 3 AND value <= 40 AND value != 'x'

以下是您要寻找的内容的猜测:

select c.Value,  count(t.Value) as Count
from (
    select 3 as Value
    union all select 4
    union all select 5 
    union all select 6 
    union all select 7 
    union all select 8 
    union all select 9 --add more as needed
) c
left outer join MyTable t on c.Value = t.Value
group by c.Value

MySQL没有递归功能,所以只能使用数字表技巧-

  • 创建一个只包含递增数字的表-使用自动递增很容易:

    DROP TABLE IF EXISTS `example`.`numbers`;
    CREATE TABLE  `example`.`numbers` (
      `id` int(10) unsigned NOT NULL auto_increment,
       PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  • 使用以下命令填充表格:

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    
    …获取所需的任意多个值

  • 这将返回您希望查看计数的值列表:

    SELECT n.id
      FROM NUMBERS n
     WHERE n.id BETWEEN 3 AND (? - 1)
        OR n.id BETWEEN (? + 1) AND 40
    
  • 左键连接到现有表,以查看计数为零的位置:

      SELECT x.id AS value,
             COALESCE(COUNT(y.id), 0) AS cnt
        FROM (SELECT n.id
                FROM NUMBERS n
               WHERE n.id BETWEEN 3 AND (? - 1)
                  OR n.id BETWEEN (? + 1) AND 40) x
    LEFT JOIN YOUR_TABLE yt ON yt.value = x.id
     GROUP BY x.id
    

  • 我想你要找的是:

    从表中选择值、计数(id)
    其中值介于3和40之间
    按值分组
    

    但是对于不存在的值,这不会给你任何计数(id)=0行。

    这个问题有很多混淆。你在这里至少问了3个不同的问题,你到底想做什么?我想得到一个结果集,其中值从3到40的计数(id),即使值=x的计数(id)为零。不!其中值=3或值=4或值=5或。。。无论如何,谢谢你。@Vincent:这在逻辑上是等价的,但是
    对性能的影响是众所周知的……如果没有值,例如35,我想计算(id),所以我不能使用3到40之间的WHERE值,因为它不会出现在我的结果集中。你现在明白了吗?我想让结果集中的每个计数(id)都在3到40之间,即使是计数(id)=0的值。我根本不知道这意味着什么。我想检查值是否等于3,4,5,6,7,…,40,但不在3或40之间,是否等于3到40之间的每个数字。@Vincent:查看我的更新,根据需要从代码中推断。