Mysql 你能简化这个问题吗?
我有一张这样结构的桌子:Mysql 你能简化这个问题吗?,mysql,sql,Mysql,Sql,我有一张这样结构的桌子: CREATE TABLE IF NOT EXISTS `mydb`.`sizes` ( `id_size` INT NOT NULL , `cm_min` INT NOT NULL , `cm_max` INT NOT NULL , PRIMARY KEY (`id_size`) ) ENGINE = InnoDB; 此查询返回大小5的宽度和高度: select cm_min, cm_max from sizes where id_size = 5
CREATE TABLE IF NOT EXISTS `mydb`.`sizes` (
`id_size` INT NOT NULL ,
`cm_min` INT NOT NULL ,
`cm_max` INT NOT NULL ,
PRIMARY KEY (`id_size`) )
ENGINE = InnoDB;
此查询返回大小5的宽度和高度:
select cm_min, cm_max from sizes where id_size = 5;
它们是:
45, 56
嗯,我想得到所有在这个范围内有cm_最小值或cm_最大值的尺寸。
我想到这样的事情:
它可以工作,但有些尺寸不在任何范围内。
我是说,如果我有这个:
id_size cm_min cm_max
1 56 59
2 63 67
3 70 74
4 76 79
5 83 86
6 60 62
7 12 14
如果我有id_size 6的值,并且执行上一个查询,它将返回选择的0行,并且我希望得到大于或小于此大小的id_size,尽管不严格在值之间。在这种情况下,将返回:
id_size cm_min cm_max
1 56 59
2 63 67
或者,例如,如果te id_size 7的值是次值,我需要得到下一个次值,在我的情况下是:
id_size cm_min cm_max
1 56 59
或者如果我有更高的值,我需要大小的id,它有第二个更高的值
然后,如果我发布的第一个查询没有任何结果,我会执行以下操作:
它对你有用。所以,我的问题是:
我可以只对一个查询执行相同的操作吗?
我希望我的解释是清楚的,我将感谢任何帮助。
提前感谢。下面的SQL将帮助您开始,它将返回高于或低于所选id的所有行,例如,此处的id=6
SELECT id_size
FROM sizes
WHERE (cm_min < 60 or cm_min > 62) and
(cm_max < 60 or cm_max > 62);
是的,我已对其进行了修改,并且可以正常工作:。但是再看一遍我的第一篇文章,我已经编辑了它,也许你知道一个更好的解决方案。真的谢谢Minesh,但它返回1和2个ID。id_大小5的值分别为83和86。是最高的,因此它将返回第二个最高值的id。我在第一篇文章中解释过。@Joan你应该注意这个存储过程或函数。好的,Minesh,我来做。你也可以看到这一点:
SELECT id_size , 'lower'
FROM sizes
WHERE (cm_min < 12 AND cm_max < 12)
LIMIT 1
UNION
SELECT id_size , 'HIGHER'
FROM sizes
WHERE (cm_min > 14 AND cm_max > 14)
LIMIT 1