是否可以引用另一列来创建 'combinatorial' 查询?
Is it possible to reference another column to create a 'combinatorial' query?
假设我有一个 table 包含这些列:
| id | mass | sequence | A | M | C |
0 100 AMMA 2 2 0
1 200 MMMC 1 3 1
我有兴趣查询质量“220”。当然,这些条目中的 none 将注册为命中,因为它们 100 =/= 220 和 200 =/= 220。
但我想考虑到字符串中每个'M'都可以将'10'添加到质量值的可能性,所以对于第一个条目,我希望它也注册为质量110, 120.对于第二个入口,我要它为大众注册210,220,230.
大致如下:
SELECT *
FROM myTable
WHERE mass IN (mass, mass + M*10);
这个查询是不够的,因为它只说明了所有 M 加 10 的情况。我想说明每个 M 加或不加 10。
我应该注意,匹配必须非常精确(误差 window 为 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
假设我有一个 table 包含这些列:
| id | mass | sequence | A | M | C |
0 100 AMMA 2 2 0
1 200 MMMC 1 3 1
我有兴趣查询质量“220”。当然,这些条目中的 none 将注册为命中,因为它们 100 =/= 220 和 200 =/= 220。
但我想考虑到字符串中每个'M'都可以将'10'添加到质量值的可能性,所以对于第一个条目,我希望它也注册为质量110, 120.对于第二个入口,我要它为大众注册210,220,230.
大致如下:
SELECT *
FROM myTable
WHERE mass IN (mass, mass + M*10);
这个查询是不够的,因为它只说明了所有 M 加 10 的情况。我想说明每个 M 加或不加 10。
我应该注意,匹配必须非常精确(误差 window 为 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