是否可以引用另一列来创建"组合"查询?



假设我有一个包含以下列的表:

| id | mass | sequence | A | M | C |
0    100    AMMA       2   2   0
1    200    MMMC       1   3   1

我有兴趣查询质量";220〃;。当然,这些条目都不会被注册为命中,因为它们100=/=220和200=/=22。

但我想说明字符串中的每个"M"可以将"10"添加到质量值的可能性,因此对于第一个条目,我希望它也注册质量110、120。对于第二个条目,我希望它为大众210、220、230注册。

大致如下:

SELECT *
FROM myTable
WHERE mass IN (mass, mass + M*10);

这个查询是不够的,因为它只考虑所有M加10的情况。我想说明每M加10或不加10。

我应该注意,匹配必须非常精确(在1的错误窗口内(。所以225不应该被注册为命中,只是:

209 < x < 211
219 < x < 221
229 < x < 231

通过查询可以做到这一点吗?

这就是您想要的吗?

where 220 between mass and mass + m * 10

你也可以这样说:

where 220 - mass between 0 and m * 10

如果您想要完全匹配,递归查询是一种选择(这需要MySQL 8.0(:

with cte as (
select id, mass, m from mytable
union all
select id, mass, m - 1 from cte where m > 0
)
select * from cte where mass + m * 10 = 220

如果您想允许1的容差,那么只需更改最终查询:

with cte as (...)
select * from cte where mass + m * 10 - 220 between -1 and 1

相关内容

  • 没有找到相关文章

最新更新