mysql查询where IN语句
Posted
技术标签:
【中文标题】mysql查询where IN语句【英文标题】:mysql query where IN statement 【发布时间】:2010-08-23 18:04:37 【问题描述】:我想做以下事情:
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),但不是 value = x。我想检查一个值是否在一个序列中(1、2、3、4、...、50)。
有谁知道如何用 mysql 实现这一点?
谢谢。
【问题讨论】:
这个问题有很多困惑。 你在这里问了至少 3 个不同的问题,你到底想做什么? 我想得到一个结果集,其中 COUNT(id) 的值从 3 到 40,即使是那些 value=x 的 COUNT(id) 为零的结果集。 【参考方案1】:MySQL 没有递归功能,因此您只能使用 NUMBERS 表技巧 -
创建一个只包含递增数字的表 - 使用 auto_increment 很容易做到:
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
LEFT JOIN 到您现有的表中,以便能够查看 COUNT 为零的位置:
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
【讨论】:
【参考方案2】:以下是您要查找的内容的猜测:
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
【讨论】:
我完全不知道这是什么意思。我想检查值是否等于 3、4、5、6、7、...、40,但不在 3 或 40 之间,等于从 3 到 40 的每个数字。 @Vincent:查看我的更新,根据需要从代码中推断。【参考方案3】:假设我理解你的问题:
SELECT count(id) FROM table WHERE value >= 3 AND value <= 40 AND value != 'x'
编辑:我想我知道你的意思
SELECT COALESCE(count(id),0) FROM table WHERE value BETWEEN 3 AND 40;
【讨论】:
不! WHERE value = 3 OR value = 4 OR value = 5 OR ...谢谢,无论如何。 @Vincent:这在逻辑上是等价的,但OR
对性能的影响是出了名的……
如果没有值,我想 COUNT(id) 例如35,所以我不能使用 WHERE 值 BETWEEN 3 AND 40,因为它不会出现在我的结果集中。你现在明白了吗?我希望结果集中的每个 COUNT(id) 的值都在 3 到 40 之间,即使是 COUNT(id)=0 的值。【参考方案4】:
我认为您正在寻找的内容类似于:
SELECT value, count(id) FROM table
WHERE value BETWEEN 3 AND 40
GROUP BY value
但是对于不存在的值,这不会为您提供任何 count(id) = 0 行。
【讨论】:
以上是关于mysql查询where IN语句的主要内容,如果未能解决你的问题,请参考以下文章